随笔一

九宫格计算思路

  • 利用控件的索引index计算出控件所在的行号和列号
  • 利用列号计算控件的x值
  • 利用行号计算控件的y值

定时任务

  • 方法1:performSelector
// 1.5s后自动调用self的hideHUD方法
[self performSelector:@selector(hideHUD) withObject:nil afterDelay:1.5];
  • 方法2:GCD
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    // 1.5s后自动执行这个block里面的代码
    self.hud.alpha = 0.0;
});
  • 方法3:NSTimer
// 1.5s后自动调用self的hideHUD方法
[NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(hideHUD) userInfo:nil repeats:NO];
// repeats如果为YES,意味着每隔1.5s都会调用一次self的hidHUD方法

常见问题

  • 项目里面的某个.m文件无法使用
    • 检查:Build Phases -> Compile Sources
  • 项目里面的某个资源文件(比如plist、音频等)无法使用
    • 检查:Build Phases -> Copy Bundle Resources

一个控件看不见有哪些可能?

  • 宽度或者高度其实为0
  • 位置不对(比如是个负数或者超大的数,已经超出屏幕)
  • hidden == YES
  • alpha <= 0.01
  • 没有设置背景色、没有设置内容
  • 可能是文字颜色和背景色一样

懒加载

  • 重写get方法,加载资源文件
  • 用到时再去加载,而且也只加载一次
  - (NSArray *)shops
{
//判断语句不能调用get方法,否则会死循环
    if (_shops == nil) {
        NSString *file = [[NSBundle mainBundle] pathForResource:@"shops" ofType:@"plist"];
        _shops = [NSArray arrayWithContentsOfFile:file];
    }
    return _shops;
}

子控件布局

  /**
 * 这个方法专门用来布局子控件,一般在这里设置子控件的frame
 * 当控件本身的尺寸发生改变的时候,系统会自动调用这个方法
 * 
 */
  - (void)layoutSubviews{
    // 一定要调用super的layoutSubviews
    [super layoutSubviews];
    
    CGFloat shopW = self.frame.size.width;
    CGFloat shopH = self.frame.size.height;
    self.iconView.frame = CGRectMake(0, 0, shopW, shopW);
    self.nameLabel.frame = CGRectMake(0, shopW, shopW, shopH - shopW);
}

初始化

/**
 init方法内部会自动调用initWithFrame:方法
 */
  - (instancetype)initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame]) {
        
    }
    return self;
}

你可能感兴趣的:(随笔一)