美文网首页
UIbutton等控件圆角设置

UIbutton等控件圆角设置

作者: Marc丶 | 来源:发表于2016-07-21 20:31 被阅读2486次

    普通圆角按钮

    在平时的开发中,一般不用图片来显示圆角按钮,以减少包大小,代码如下,

    UIButton *doneBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    doneBtn.frame = CGRectMake(0,0,40,20);
    doneBtn.backgroundColor = [UIColor redColor];
    //设置圆角的大小
    doneBtn.layer.cornerRadius = 3;
    //此行代码必须有(UIView例外)
    doneBtn.layer.masksToBounds = YES;
    doneBtn.titleLabel.font = [UIFont systemFontOfSize:15];
    [doneBtn setTitle:@"按钮" forState:UIControlStateNormal];
    [doneBtn addTarget:self     action:@selector(clickdoneWithButton:)  forControlEvents:UIControlEventTouchUpInside];
    

    离屏渲染

    以上方法只适用于一个界面只有几个按钮,如果是大量的按钮,如UITableViewCell上那么就会出现卡顿,造成这个原因就是离屏渲染。
    所谓离屏渲染指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。
    而以下一些行为都会触发离屏渲染
    shouldRasterize(光栅化)
    masks(遮罩)
    shadows(阴影)
    edge antialiasing(抗锯齿)
    group opacity(不透明)
    这里我们设置了masksToBounds属性,所以会触发离屏渲染,因而卡顿。
    还有一种方式可以查看是否有离屏渲染,就是 Instruments->Core Animation,至于怎么使用请看我另一篇文章”Core Animation的使用”
    既然不能使用masksToBounds,那怎么设置圆角呢?其实绘制一个圆角的图铺在控件底层,实现代码如下

    @implementation UIImage (CornerRadius)
    - (UIImage *)chh_imageWithRoundedCornersAndSize:(CGSize)sizeToFit andCornerRadius:(CGFloat)radius
    {   
    CGRect rect = (CGRect){0.f, 0.f, sizeToFit};
    UIGraphicsBeginImageContextWithOptions(sizeToFit, NO, UIScreen.mainScreen.scale);
    CGContextAddPath(UIGraphicsGetCurrentContext(),
    [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:4].CGPath);
    CGContextClip(UIGraphicsGetCurrentContext());
    [self drawInRect:rect];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
    }
    @end
    

    这样就可以防止离屏渲染了,至于想知道离屏渲染更多信息可以百度,我也就不啰嗦了。

    相关文章

      网友评论

          本文标题:UIbutton等控件圆角设置

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