www.2527.com_澳门新葡8455手机版_新京葡娱乐场网址_
做最好的网站

不停立异总计,1自定义方法失效

2019-09-16 08:45 来源:未知

第一步:找到KSImageNamed插件的不二等秘书诀路线1:

@(iOS 项目实战)[品类实战]

Xcode中项指标缓存路线

  • /Users/username/Library/Developer/Xcode/DerivedData

www.2527.com 1Snip20151108_29.png

  • 作者: Liwx
  • 邮箱: 1032282633@qq.com

Xcode自定义代码块 寄放路径

  • /Users/username/Library/Developer/Xcode/UserData/CodeSnippets

路子2:KSImageNamed插件路线比较新鲜,有时候会同偶然候出现在此地


Xcode中框架路线

  • Frameworks框架存放路线
    • /Applications/Xcode 6.3.2.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Frameworks

www.2527.com 2Snip20151108_30.png

目录

Xcode第三方插件路线

  • 插件安装路线
- /Users/lvvl/Library/Application Support/Developer/Shared/Xcode/Plug-ins
  • 变动KSImageNamed这几个活动相配图片插件的里边方法:
    • 1: 进入 /Users/lvvl/Library/Application Support/Developer/Shared/Xcode/Plug-ins/KSImageNamed.xcplugin/Contents/Resources/Completions.plist
    • 2: 拷贝1个数组,更动内部的 imageNamed:为自定义的方法名
    • 3: 重启Xcode,以往使用钦赐的点子, 就能够半自动相称图片

第二步:修改Completions.plist文件

  • 09.连串实战 百思不得姐 设置帖子圆形头像,最热争辨管理,修复再度点击bug,刷新控件的使用.
  • 1.安装帖子头像
    • SDWebImage图片下载战败管理
    • Xcode插件安装路线
    • KSImageName增添自定义方法提示成效
  • 2.最热争执
    • 最热批评
  • 3.拖动触发开关重复点击bug
  • 4.苹果官方刷新控件
    • UIRefreshControl刷新控件
  • 5.选用MJRefresh刷新框架
    • MJRefresh的使用
  • 补充
    • AFNetworking的使用
    • 行使第三方框架时子类化
    • github使用
    • 真机测验难点

Xcode文书档案安装

  • 位置1:
- /Applications/Xcode.app/Contents/Developer/Documentation/DocSets
    - 注意: 拷贝之前最好将默认的文档删除, 因为如果同时存在高版本和低版本的文档, 那么低版本的不会显示
  • 依然地方2:
    • /Users/uesrname/Library/Developer/Shared/Documentation/DocSets
      • 一旦没有该文件夹能够友善创造一个

www.2527.com 3Snip20151108_31.png


Xcode修改项目模板以及main函数中的内容

  • 修改项目模板
- /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/Project Templates/Mac/Application/Command Line Tool.xctemplate/TemplateInfo.plist
  • 修改OC文件尾部的描述音讯
    • /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File Templates/Source/Cocoa Class.xctemplate/TemplateInfo.plist

如若路线一和路子二同期有KSImageNamed插件,那么都亟待开展修改Completions.plist文件,自定义的办法才会卓有功用;示例图如下

1.装置帖子头像

设置思路: 项目中多处用到安装圆形图片的法力,思虑封装生成圆形图片的分类UIImage Circle.因为头像图片财富都以经过url获取,所以能够封装设置圆形头像分类,将使用SDWebImage获取图片的操作也封装到设置圆形头像分类中UIImageView Header.

Xcode内部存款和储蓄器处理中相关安装

  • 关闭ARC的秘诀(ARC会屏蔽内部存款和储蓄器管理的一些操作,会潜濡默化学习内部存款和储蓄器管理),
- 在Xcode   中,单击左上角蓝色项目名图标
- 选Build Settings
- 在选里面的关键字arc
- 找到ARC- -》将YES改成NO
  • 敞开内部存款和储蓄器管理中的 丧尸类成效步骤:

    • 当选模拟器左侧那些targetLogo
    • edit Scheme
    • Run
    • 勾选Obiect-C Enable Zombie Objects
  • Xcode的ARC转换

    • 1》将非ARC项目全部转成ARC项目
      • Edit- ->Convert to Objective-C ARC
    • 2》在品种中想让ARC代码和非ARC代码共存的章程
      • 点击左上角宝蓝的类型Logo- ->Build Phases- ->Compile Sources- ->双击想要设置的.m文件- ->设置Compiler Flags
        • 输入-f-objc-arc(当前.m文件使用ARC)
        • 恐怕输入-fno-objc-arc(当前.m文件不行使ARC)
    • 3> 将MRC的持有代码编写翻译成静态库(直接选用静态库)

www.2527.com 4Snip20151108_32.png

SDWebImage图片下载战败管理

  • 图片下载退步管理

    • 图片下载失利时存在难题: 借使图片下载失利时,image为nil,又将nil赋值给UIImageView,会出现图片下载失败时,显示为空白,连占位图片都不显示.
    • 消除方案: 在使用sd_setImageWithURL:方法加载图片的时候,判定SDWebImage获取回来的image是否为nil,即便为nil,直接重临.
    • 参照代码
      // 2.加载图片
      [self sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:placeholderImage completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
    
          // 2.1 如果图片获取失败,直接退出,否则会出现图片加载失败,占位图片不显示
          if (image == nil) return;
          // 2.2 图片加载成功,显示图片
          self.image = image;
      }];
    

  • 圆形头像管理

    • 封装生成圆形图片UIImage Circle分类
      • 提供生成圆形图片的对象方法wx_circleImage方法.
      • 提供经过图片名快速生成圆形图片的类方法wx_circleImageName:方法.
      // ----------------------------------------------------------------------------
      // 生成圆形图片
      - (instancetype)wx_circleImage
      {
          // 1.开启图形上下文
          UIGraphicsBeginImageContextWithOptions(self.size, NO, 0);
    
          // 2.描述裁减路径
          UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, self.size.width, self.size.height)];
          // 3.设置裁减路径
          [path addClip];
          // 4.绘制图片
          [self drawAtPoint:CGPointZero];
          // 5.生成新图片
          UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
          // 6.关闭图形上下文
          UIGraphicsEndImageContext();
    
          return image;
      }
    
      // ----------------------------------------------------------------------------
      // 通过图片名生成圆形图片
        (instancetype)wx_circleImageName:(NSString *)imageName
      {
          return [[UIImage imageNamed:imageName] wx_circleImage];
      }
    
    • 安装圆形头像分类UIImageView Header
      • 设置圆形占位图片.
      • 将使用SDWebImage获取图片的操作封装到设置圆形头像的分类中.
      // ----------------------------------------------------------------------------
      // 设置圆形头像
      - (void)wx_setHeader:(NSString *)url
      {
          // 1.创建占位图片
          UIImage *placeholderImage = [UIImage wx_circleImageName:@"defaultUserIcon"];
    
          // 2.加载图片
          [self sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:placeholderImage completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
    
              // 2.1 如果图片获取失败,直接退出,否则会出现图片加载失败,占位图片不显示
              if (image == nil) return;
              // 2.2 图片加载成功,显示图片
              self.image = [image wx_circleImage];
          }];
      }
    

Xcode插件安装路线

  • Xcode插件安装路线
    • 路径一: /Users/用户名/Library/Application Support/Developer/Shared/Xcode/Plug-ins
    • 路径二: /Users/用户名/Library/Developer/Xcode/Plug-ins

KSImageName增添自定义方法提醒作用

  • 1.招来插件安装路线

    • 收获KSImageName在Xcode7的安装路线(/Users/用户名/Library/Developer/Xcode/Plug-ins).

    • 入选KSImageNamed.ideplugin,右击展现包内容,展开/Contents/Resources/Completions.plist文件,在Completions.plist文本中张开增添配置.

      • 复制插件暗中认可的唤醒imageName选项,复制item0.
      • 将自定义方法增加到新扩大的item中.
      • 注意: 修改KSImageNamed的plist配置文件,当中有个布局格局中左边有个空格.
    • Completions.plist文本配置图解

www.2527.com 5

01.Completions.plist文件配置图解.png


  • 2.在KSImageName源码中修改配置

    • 从github下载KSImageName的花色,在源码中期维修改配置.
  • 3.如果找不到资源库是因为本地化文件.localized被剔除了,能够从别的文件夹中复制一份到Library中就可以再一次展现资源库.注意: .localized文本是隐身文件,要有限帮衬MacComputer早已开启呈现遮蔽文件选项.


  • 4.装置帖子头像为圆形头像

    • 在WXTopicCell.m的模型的set方法setTopicItem:主意中安装圆形头像.
      // 重写模型的set方法
      - (void)setTopic:(XMGTopic *)topic
      {
          // 设置帖子圆形头像
          [self.profileImageView xmg_setHeader:topic.profile_image];
    
          // 其他设置...
      }
    

2.最热龃龉

剖判: 借使服务器再次来到的数额有最热批评有数据,则须要出示最热商量,不然没有须求出示最热研究。最热商议中富含语音批评,需对语音商量管理。

最热商量

  • 最热商酌央浼数据解析

    • 呼吁所需参数字段(a, c, type)

    www.2527.com 6

    02.最热斟酌央浼数据深入分析.png

  • 最热争辩所需数据: 顾客名(user.username) 批评内容(content).
/**

// 服务器返回的JSON数据,其中包含用户名   评论内容
{
    content = "U4e94U767eU5e74U524dU4e00U4ebaU8e0fU5e73U5929U754cUff0cU4ecaU5929U5341U4e09U4ebfU4ebaU5e2eU4f60U8e0fU5e73U6625U665aU3002";
    ctime = "2016-01-28 16:54:32";
    "data_id" = 17032894;
    id = 42164160;
    "like_count" = 678;
    precid = 0;
    precmt =     (
    );
    preuid = 0;
    status = 0;
    user =     {
        id = 16413351;
        "is_vip" = 0;
        "personal_page" = "http://user.qzone.qq.com/DFA2DC83F91D296282FD922FA4C45181";
        "profile_image" = "http://qzapp.qlogo.cn/qzapp/100336987/DFA2DC83F91D296282FD922FA4C45181/100";
        "qq_uid" = "";
        "qzone_uid" = DFA2DC83F91D296282FD922FA4C45181;
        sex = f;
        username = "U3001Just .";
        "weibo_uid" = "";
    };
    voicetime = 0;
    voiceuri = "";
}
 */

  • 1.给WXTopicItem模型加上最热批评属性.(NSArray *top_cmt;)

  • 2.在模型的set方法setTopicItem:管理最热商酌(隐蔽/突显).

    • 最热批评: 顾客名 争辨内容
    • 最热斟酌管理参照他事他说加以考察代码
      // ----------------------------------------------------------------------------
      // 设置最热评论
      - (void)setTopCmt
      {
          // 1.获取最热评论数据,返回数据为字典,只显示第一条,只需取出第一条即可
          NSDictionary *dict = self.topicItem.top_cmt.firstObject;
          // 2.判断是否有最热评论数据
          if (dict) {
    
              // 1.获取最热评论 用户名   评论内容
              NSString *username = dict[@"user"][@"username"];
              NSString *content = dict[@"content"];
              // 判断评论内容是否为空串,空串是语音评论
              if (content.length == 0) {
                  content = @"[语音评论]";
              }
    
              self.topCmtContentLabel.text = [NSString stringWithFormat:@"%@ : %@", username, content];
              self.topCmtView.hidden = NO;
          } else {
              self.topCmtContentLabel.text = @"";
              self.topCmtView.hidden = YES;
          }
      }
    

  • 注意: 判断数组有没有内容用count方法,判断字符串是不是空串,用length方法.

    • 漏洞非常多写法
      // 如果判断数组有没有内容,不能使用下面的判断
      NSArray *array = @[@"abc", @"cdf"];
      if (array != nil) {
      }
      if (array) {
      }
    
      // 如果判断字符串是不是空串,不能使用下面的判断
      NSString *content = @"abcdef";
      if (content != nil) {
      }
    

3.拖动触发按键重复点击bug

  • 拖动scrollView时,没滚动到任何分界面,仍旧在原先分界面时,又会接触按键重复点击.

    • bug重现

www.2527.com 7

03.重复点击bug.gif

  • 缘由: 在监听scrollView甘休拖动的scrollViewDidEndDecelerating:方法中调用了titleButtonClick:方法,导致只要顾客稍微左右滑动的时候就接触标题按键重复点击.

  • 斩草除根方案: 抽出titleButtonClick:方法在处理标题按钮、下划线、scrollView,封装dealTitleButtonClick:方法.在scrollViewDidEndDecelerating:方法中调用了dealTitleButtonClick:主意就能够.

  • 1.在标题按键监听的章程中,管理按键,下划线滚动,scrollView滚动触发标题开关重复点击

    • 重新点击标题按键才发通告
    • 拖动时无需发通报
      // ----------------------------------------------------------------------------
      // 处理标题按钮、下划线、scrollView
      - (void)dealTitleButtonClick:(WXTitleButton *)button
      {
          // 切换中状态
          self.selectedButton.selected = NO;
          button.selected = YES;
          self.selectedButton = button;

          // 1.获取索引,按钮的tag值
          NSInteger index = button.tag;

          // 2.执行下划线动画,动画执行完成修改scrollView的偏移量,显示对应子控制器的view
          [UIView animateWithDuration:0.25 animations:^{

              // TODO: 设置下划线的宽度和中心点
              self.underLineView.wx_width = button.titleLabel.wx_width;
              self.underLineView.wx_centerX = button.wx_centerX;

              // 切换到对应的view
              self.scrollView.contentOffset = CGPointMake(self.scrollView.wx_width * index, self.scrollView.contentOffset.y);
          } completion:^(BOOL finished) {
              // 更新偏移量
              CGPoint offset = self.scrollView.contentOffset;
              offset.x = index * self.scrollView.wx_width;
              [self.scrollView setContentOffset:offset];

              // 添加对应子控制器的view
              [self addChildVcViewIntoScrollView:index];
          }];
      }

      #pragma =======================================================================
      #pragma mark - UIScrollViewDelegate代理方法
      - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
      {
          // 1.获取索引
          NSInteger index = self.scrollView.contentOffset.x / self.scrollView.wx_width;

          // 2.根据索引获取按钮
          WXTitleButton *titleButton = self.titleView.subviews[index];

          // 3.调用按钮的点击事件
          [self dealTitleButtonClick:titleButton];
      }
  • 2.双重视击标题按键下拉刷新

    • 安装偏移量将header偏移到titleView下面.
    • 连日来重复点击时,假使正在刷新,就不需要再刷新.
    • 再次点击标题按键代码参谋
      // ----------------------------------------------------------------------------
      // 监听tabBarButton重复点击通知
      - (void)tabBarButtonDidRepeatClick
      {
          // ------------------------------------------------------------------------
          // 1.判断控制器的view有没有在window上,有没有和window重叠
          // 如果控制器的view不在window上,则直接返回
          if (self.view.window == nil) return;
    
          // 如果控制器的view没有和window重叠,则直接返回
          if (![self.view wx_intersectWithView:nil]) return;
    
          // ------------------------------------------------------------------------
          // 2.重复点击,执行下拉刷新
          // 2.1 判断当前是否在刷新,如果正在刷新直接退出
          if (self.isHeaderRefreshing) return;
          // 2.2 更新为刷新状态
          self.headerRefreshing = YES;
          self.headerLabel.text = @"正在刷新数据...";
          self.headerLabel.backgroundColor = [UIColor greenColor];
    
          // 2.3 设置内边距和偏移量,让header处于titleView的下面
          [UIView animateWithDuration:0.25 animations:^{
    
              // 2.3.1 修改内边距,增加顶部内边距
              UIEdgeInsets inset = self.tableView.contentInset;
              inset.top  = self.header.wx_height;
              self.tableView.contentInset = inset;
    
              // 2.3.2 修改偏移量
              CGPoint offset = self.tableView.contentOffset;
              offset.y = -(WXNavMaxY   WXTitlesViewH   self.header.wx_height);
              [self.tableView setContentOffset:offset];
          }];
    
          // ------------------------------------------------------------------------
          // 3.请求数据, 延迟模拟
          dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
              [self loadNewTopics];
          });
      }
    
  • 最棒思索footer用addSubview添加,不用tableViewFooterView,不要占用tableViewFooterView.

4.苹果官方刷新控件

UIRefreshControl刷新控件

  • UIRefreshControl继承自UIControl,能够使用addTarget方法监听ValueChange事件.

  • 手动调用begin方法,不会触发ValueChange

  • 运用系统的基础代谢控件UIRefreshControl控件有个bug,在UIRefreshControl的基础代谢提醒器正在刷新时切换到其他控制器,再再次来到调整器,会现出刷新指示器停止动画了.

    // TODO: 1.使用系统的刷新控件UIRefreshControl, UIRefreshControl控件有个问题,在UIRefreshControl的刷新指示器
    // 正在刷新时切换到其他控制器,再返回控制器,会出现刷新指示器停止动画了.
    UIRefreshControl *header = [[UIRefreshControl alloc] init];
    [header addTarget:self action:@selector(loadNewTopics) forControlEvents:UIControlEventValueChanged];
    [self.tableView addSubview:header];
    self.header = header;

5.运用MJRefresh刷新框架

MJRefresh的使用

  • MJRefresh的类结构图

    • MJRefresh刷新框架中上拉刷新有2个类,下拉刷新有4个类能够使用.
      • 上拉刷新: MJRefreshNormalHeader, MJRefreshGifHeader
      • 下拉刷新: MJRefreshBackNormalFooter, MJRefreshBackGifFooter,MJRefreshAutoNormalFooter,MJRefreshAutoGifFooter

    www.2527.com 8

    04.MJRefresh的类组织图.png

  • 下拉scrollView时或程序步入时发轫刷新,当呼吁完结/战败时截止刷新.

    • 开班刷新: [self.tableView.mj_header beginRefreshing];
    • 终止刷新: [self.tableView.mj_footer endRefreshing];
  • 联合设置下拉刷新显示内容.

    • 应用持续MJRefreshNormalHeader的自定义类WXRefreshHeader.
    • 采取重写框架的prepare方法系统的initWithFrame方法初始化.封装下拉控件的属性设置,无需每一个地方都设置.
    • 使用方式,只需导入自定义类WXRefreshHeader.h,设置tableView的mj_www.2527.com,header属性为自定义类WXRefreshHeader就可以
    // WXRefreshHeader.m
    // ----------------------------------------------------------------------------
    // 初始化子控件
    - (void)prepare
    {
        [super prepare];

        // ------------------------------------------------------------------------
        // 1.设置刷新控件属性
        // 1.1 设置自动改变透明度
        self.automaticallyChangeAlpha = YES;
        // 1.2 设置隐藏时间
        self.lastUpdatedTimeLabel.hidden = YES;
        // 1.3 设置状态文字颜色
        self.stateLabel.textColor = [UIColor orangeColor];

        // ------------------------------------------------------------------------
        // 2.设置刷新状态文字
        [self setTitle:@"下拉刷新" forState:MJRefreshStateIdle];
        [self setTitle:@"松开 
TAG标签:
版权声明:本文由澳门新葡8455手机版发布于www.2527.com,转载请注明出处:不停立异总计,1自定义方法失效
 
除了因为多元化的娱乐产品使人流连忘返、更因为高质量的服务以及www.2527.com长久以来的良好信誉,澳门新葡8455手机版就和范闲五岁开始酗酒一样——五竹只负责保护范闲的安全,新京葡娱乐场网址是菲律宾官方认证的娱乐公司,摇身一变成为世人嘱目的运动投注和网上赌场集团。 澳门新葡8455手机版 | 网站地图 | Xml地图 | 网站标签 |