Objective-C笔记

UIScrollview上的UIPangesturerecognizer冲突

在tableview里的cell的imageview上加个UIPangesturerecognizer会发现优先滚动imageview,tableView不响应滚动了,原因是tableview的实现也是用了UIPangesturerecognizer。解决方案如下:

// 实现 UIGestureRecognizerDelegate
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}

CGRect函数

  • CGRectOffset使用从源CGRect偏移的原点来创建矩形

        float offset = 25.0;
        CGRect r1 = CGRectMake(100, 100, 100, 100);
        CGRect r2 = CGRectOffset(r1, offset, offset);
  • CGRectIntersectsRect允许我们确定两个矩形是否相交

        float offset = 25.0;
        CGRect r1 = CGRectMake(100, 100, 100, 100);
        CGRect r2 = CGRectMake(150, 150, 100, 100);
        if (CGRectIntersectsRect(r1, r2))
        {
            NSLog(@"intersecting");
        }
  • NSStringFromCGRect可以用来把CGRect显示到控制台

        CGRect r1 = CGRectMake(100, 100, 100, 100);
        NSLog(@"rect:@%",NSStringFromCGRect(r1));  
    // 同样,CGRectFromString允许我们根据一个字符串创建一个CGRect:
        NSString *r = @"{0,0},{100,100}";
        CGRect r1 = CGRectFromString(r);

为视图某个角添加圆角

UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:aView.layer.bounds
byRoundingCorners:UIRectCornerTopLeft | UIRectCornerBottomRight
cornerRadii:CGSizeMake(25, 0)];
CAShapeLayer *roundRectLayer = [[CAShapeLayer alloc] init];
roundRectLayer.frame = aView.layer.bounds;
roundRectLayer.path = path.CGPath;
aView.layer.mask = roundRectLayer;
aView.clipsToBounds = NO;

若配置某个角为圆角的话,只需要指定对应的UIRectCorner即可:

UIRectCornerAllCorners 全角
UIRectCornerTopLeft 左上角
UIRectCornerTopRight 右上角
UIRectCornerBottomLeft 左下角
UIRectCornerBottomRight 右下角

设置UITableView的分割线顶头

使用setSeparatorInset:UIEdgeInsetsZero来解决:

  1. 直接对tableView进行设置:

    if ([_tableView respondsToSelector:@selector(setSeparatorInset:)]) {
    [_tableView setSeparatorInset:UIEdgeInsetsZero];
    }
    if ([_tableView respondsToSelector:@selector(setLayoutMargins:)]) {
    [_tableView setLayoutMargins:UIEdgeInsetsZero];
    }
  2. 实现UITableViewDelegate的代理方法:

    - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
    [cell setSeparatorInset:UIEdgeInsetsZero];
    }
    if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
    [cell setLayoutMargins:UIEdgeInsetsZero];
    }
    }

去掉分割线 _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

Frame布局时使用CGRectInset设置左右、上下边距

UIView *aView = [[UIView alloc] initWithFrame:CGRectInset(self.view.bounds, 10, 100)];
aView.backgroundColor = [UIColor orangeColor];
[self.view addSubview:aView];

PCH文件配置

如图:在Build Settings内搜索prefix header

然后修改为$(SRCROOT)/Mydemo/MydemoPrefixHeader.pch
其中Mydemo对应project name, MydemoPrefixHeader.pch对应PCH file

SDK出现libc++abi.dylib: terminating

SDK出现libc++abi.dylib: terminating with uncaught exception of type NSException 的问题解决方法:

工程文件中选择Build Setting,在”Other Linker Flags”中加入”-Objc -all_load”

查找在数组中NSNumber的最大值和最小值

参考:
http://stackoverflow.com/questions/15931112/finding-the-smallest-and-biggest-value-in-nsarray-of-nsnumbers

- (void)sample {
NSArray *array = @[@8.091, @0.31, @10.55, @50.5, @5.50, @0.31];
NSNumber *maxValue = [array valueForKeyPath:@"@max.self"];
NSLog(@"maxValue - %@", maxValue); // maxValue - 50.5
NSNumber *minValue = [array valueForKeyPath:@"@min.self"];
NSLog(@"minValue - %@", minValue); // minValue - 0.31
NSInteger index = [array indexOfObject:minValue];
NSLog(@"index - %lu", index); // index - 1
// 从输出可以看到当有重复值时,获取的index是在靠前位置的
}

热评文章