美文网首页
iOS-防止离屏渲染

iOS-防止离屏渲染

作者: Arthur澪 | 来源:发表于2020-03-28 10:12 被阅读0次

UIBezierPath 贝塞尔曲线给 view 绘圆角

1、绘圆形

-(void)pd_setRadius{
    [self.superview layoutIfNeeded];   // 确保获取到 bounds

     UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds byRoundingCorners:UIRectCornerAllCorners cornerRadii:self.bounds.size];
     CAShapeLayer *maskLayer = [[CAShapeLayer alloc]init];
     maskLayer.frame = self.bounds;
     maskLayer.path = maskPath.CGPath;
     self.layer.mask = maskLayer;
}

2、绘圆角

-(void)pd_setRadius:(float)radius{
    
    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds byRoundingCorners:UIRectCornerAllCorners cornerRadii:CGSizeMake(radius, radius)];
    
    CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
    maskLayer.frame = bounds;
    maskLayer.path = maskPath.CGPath;
    
    [self.layer setMask: maskLayer];
}

3、自定义绘圆角

// 给view的上方两个角 设圆角
-(void)setTopLeftTopRightCornerRadius:(float)radius{
    
    //设置所需的圆角位置以及大小
    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:CGSizeMake(radius, radius)];
    CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
    maskLayer.frame = self.bounds;
    maskLayer.path = maskPath.CGPath;
    self.layer.mask = maskLayer;
    
}

// 参数可选值
typedef NS_OPTIONS(NSUInteger, UIRectCorner) {
    UIRectCornerTopLeft     = 1 << 0,
    UIRectCornerTopRight    = 1 << 1,
    UIRectCornerBottomLeft  = 1 << 2,
    UIRectCornerBottomRight = 1 << 3,
    UIRectCornerAllCorners  = ~0UL
};

使用绘图技术 直接给image切圆角

 - (UIImage *)imageWithCornerRadius:(CGFloat)radius size:(CGSize)size {
    CGRect rect = (CGRect){0.f, 0.f, size};
    UIGraphicsBeginImageContextWithOptions(size, NO, UIScreen.mainScreen.scale);
    CGContextAddPath(UIGraphicsGetCurrentContext(), [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:radius].CGPath);
        CGContextClip(UIGraphicsGetCurrentContext());
    [self drawInRect:rect];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    return image;
}

相关文章

  • iOS-防止离屏渲染

    UIBezierPath 贝塞尔曲线给 view 绘圆角 1、绘圆形 2、绘圆角 3、自定义绘圆角 使用绘图技术 ...

  • iOS离屏渲染

    iOS-离屏渲染详解关于iOS离屏渲染的深入研究关于离屏渲染这两片文章分析的很详细。 渲染过程 根据渲染流水线示意...

  • 待看文章

    内存相关 【基本功】深入剖析Swift性能优化 渲染相关 关于iOS离屏渲染的深入研究 线程相关 iOS-线程安全

  • iOS-离屏渲染

    在OpenGL中,GPU有2种渲染方式On-Screen Rendering:当前屏幕渲染,在当前用于显示的屏幕缓...

  • iOS-离屏渲染

    一.渲染的两种模式 On-Screen Rendering当前屏幕渲染,指的是GPU的渲染操作是在当前用于显示的屏...

  • iOS--离屏渲染

    离屏渲染(Offscreen rendering) 离屏渲染的定义 离屏渲染(offscreen-renderin...

  • UILabel 圆角

    很多人发现这样设置后圆角不生效,必须加上下面代码才会有圆角 但是这样做就会触发离屏渲染,可直接这样做防止离屏渲染 ...

  • 图层性能-离屏渲染、光栅化等

    一.离屏渲染 1.在屏渲染、离屏渲染: On-Screen Rendering/在屏渲染:在屏渲染:指的是GPU的...

  • 关于离屏渲染

    1.什么是离屏渲染 2.离屏渲染的触发方式 3.离屏渲染的意义 4.离屏渲染的不足 1.什么是离屏渲染 要了解离屏...

  • 四、iOS离屏渲染

    一、开启图层是否触发离屏渲染问题 注:离屏渲染的图层会标记为黄色 二、离屏渲染的渲染流程 三、离屏渲染触发的原因 ...

网友评论

      本文标题:iOS-防止离屏渲染

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