美文网首页
iOS 小知识点记录

iOS 小知识点记录

作者: 丹丹十个胆小鬼 | 来源:发表于2019-01-15 13:37 被阅读0次

    1、判断一个点或一个区域是否在某个指定的区域

    /* Return true if `point' is contained in `rect', false otherwise. */
    
    CG_EXTERN bool CGRectContainsPoint(CGRect rect, CGPoint point)
        CG_AVAILABLE_STARTING(10.0, 2.0);
    
    /* Return true if `rect2' is contained in `rect1', false otherwise. `rect2'
       is contained in `rect1' if the union of `rect1' and `rect2' is equal to
       `rect1'. */
    
    CG_EXTERN bool CGRectContainsRect(CGRect rect1, CGRect rect2)
        CG_AVAILABLE_STARTING(10.0, 2.0);
    

    2、调整按钮内部imageView的大小

    - (CGRect)imageRectForContentRect:(CGRect)contentRect

    //去调整按钮内部imageView的大小
    //返回按钮内部imageView尺寸位置
    //contentRect:当前按钮的尺寸大小.
    - (CGRect)imageRectForContentRect:(CGRect)contentRect {
        
        CGFloat w = 40;
        CGFloat h = 45;
        CGFloat x = (contentRect.size.width-w)*0.5;
        CGFloat y = 20;
        
        CGRect rect = CGRectMake(x, y, w, h);
        return rect;
    }
    

    3、设置一个按钮内部文字显示不同的文字属性

    调用按钮的setAttributedTitle方法,根据range去设置不同位置文字的不同属性。
    - (void)setAttributedTitle:(nullable NSAttributedString *)title forState:(UIControlState)state

    //普通状态
        NSString *first = @"VIP";
        NSString *second = @"100元";
        NSString *btnString = [NSString stringWithFormat:@"%@\n%@", first, second];
        NSMutableAttributedString *attriStr = [[NSMutableAttributedString alloc] initWithString:btnString];
        NSDictionary *dict = @{NSForegroundColorAttributeName : [UIColor yellowColor],NSFontAttributeName : [UIFont systemFontOfSize:15]};
        NSRange range = NSMakeRange(first.length+1, second.length);
        [attriStr addAttributes:dict range:range];
        button.titleLabel.numberOfLines = 0;
        button.titleLabel.textAlignment = NSTextAlignmentCenter;
        [button setAttributedTitle:attriStr forState:UIControlStateNormal];
    

    4、根据一张大图去裁剪成很多张小图片

    CGImageRef __nullable CGImageCreateWithImageInRect( CGImageRef cg_nullable image, CGRect rect)

    // 计算裁剪小图片的x坐标
            littleImageX = i * littleImageW;
            // 裁剪小图片并设置
            CGImageRef littleImage = CGImageCreateWithImageInRect(origImage.CGImage, CGRectMake(littleImageX, 0, littleImageW, littleImageH));
            UIImage *littleImageN = [UIImage imageWithCGImage:littleImage];
            [btn setImage:littleImageN forState:UIControlStateNormal];
    

    5、从上下文中清除某个区域

    // 在上下文中清除Rect内的内容
            CGContextClearRect(ctx, clearRect);
    

    6、清除形变

    self.view.transform = CGAffineTransformIdentity;

    7、UIView动画的弹簧效果

    Duration:动画的执行时长
    delay:动画延时长.
    Damping:动画的弹性系数,越小,弹簧效果越明显
    initialSpringVelocity:弹簧初始化速度

    [UIView animateWithDuration:0.8 delay:0 usingSpringWithDamping:0.1 initialSpringVelocity:0
    options:UIViewAnimationOptionCurveLinear animations:^{
    //动画执⾏行代码
    } completion:^(BOOL finished) { 
    //动画完成时调⽤用.
    }];
    

    8、获取全局的(整个应用程序)导航条

    UINavigationBar *bar = [UINavigationBar appearance];
    

    获取指定类下的导航条,此方法常用在导航条类的+ (void)initialize方法中,对整个app的导航条做一次性的内容设置。

       //获取指定类下的导航条
        UINavigationBar *bar = [UINavigationBar appearanceWhenContainedInInstancesOfClasses:@[
                                                                                              [self class]
                                                                                              ]
                                                                                ];
    

    9、导航条达到透明的效果

      /*
         设置导航条透明度为0,没有效果,还是原来的样⼦. 原因是因为导航条上面那一块并不直接是导航条,它是导航条里面的⼀个子控件. 所以在这里设置它没有效果,因为系统会生成⼀个半透明的图片.
         
          self.navigationController.navigationBar.alpha = 0.0;
          所以在这里我们可以考虑给它设置一个半透明的图片. 在这里,有一个模式,必须要传默认UIBarMetricsDefault模式. 在这里发现设为nil的时候,也没有效果,那是因为系统它做了⼀层判断,它会判断如果传入的系统图片为空的话,它就会帮你生成一个半透明的图片,设置导航条的背景图片.
         **/
        [self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
        [self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];
    

    10、获取不需要渲染的原始图片

        UIImage *image = [UIImage imageNamed:imageName];
        image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    

    11、当tap手势和点击事件都存在是,默认手势的优先级更高,Touch不起作用,解决方法

    实现UIGestureRecognizerDelegate方法 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

    /**
     called before touchesBegan:withEvent: is called on the gesture recognizer for a new touch. return NO to prevent the gesture recognizer from seeing this touch
      在touchesBegan:withEvent:之前调用,手势识别器获取一个新touch,返回NO,不让手势识别器识别该touch
    
     @return NO:不让手势识别器识别该touch; YES:让手势识别器识别该touch
     */
    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
        
        if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
            return NO;
        } else {
            return YES;
        }
    }
    

    12、更新tableview时自动加一个序列帧动画

    //更新数据(当更新tableView时会自动加一个序列帧动画)
        [tableView beginUpdates];
        [tableView endUpdates];
    

    13、nil和NSNull区别

           [NSNull null]; //空对象
             nil //空
             NSNull *null = [NSNull null];
            NSDictionary *dict = @{@"name":@"zhangsan",@"age":[NSNull null]};
    

    持续更行中........

    相关文章

      网友评论

          本文标题:iOS 小知识点记录

          本文链接:https://www.haomeiwen.com/subject/dbjedqtx.html