iOS开发 /UIImage(图片裁剪)/UIView裁剪

需求是需要上面圆弧效果
️PS:用贝塞尔曲线实现圆弧效果涉及到轻微的高中几何知识...
可以自行百度,其实只需要求出半径....


一、这是UIImage用贝塞尔曲线裁剪的效果:
image.png
代码实现
    // 半径
    CGFloat r = (SCREEN_WIDTH*0.5*SCREEN_WIDTH*0.5 + 80.0*80.0)/(2.0*80.0);
    
    UIBezierPath *path = [UIBezierPath bezierPathWithRect:CGRectMake(0, 80.0, SCREEN_WIDTH, SCREEN_HEIGHT-80.0)];
    
    [path addArcWithCenter:CGPointMake(SCREEN_WIDTH*0.5, r) radius:r startAngle:5/4.0*M_PI endAngle:8/4.0*M_PI clockwise:YES];
    
    // 开启位图上下文
    UIGraphicsBeginImageContextWithOptions(imageView.frame.size, NO, 0);
    
    [path addClip];
    
    // 绘制图片
    [textImage drawInRect:imageView.frame];
    
    // 获取当前图片
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    
    // 关闭上下文
    
    UIGraphicsEndImageContext();
二、这是UIView用贝塞尔曲线裁剪的效果:
image.png
代码实现
    // 半径
    CGFloat r = (SCREEN_WIDTH*0.5*SCREEN_WIDTH*0.5 + 80.0*80.0)/(2.0*80.0);
    
    UIBezierPath *path = [UIBezierPath bezierPathWithRect:CGRectMake(0, 80.0, SCREEN_WIDTH, SCREEN_HEIGHT-80.0)];
    
    [path addArcWithCenter:CGPointMake(SCREEN_WIDTH*0.5, r) radius:r startAngle:5/4.0*M_PI endAngle:8/4.0*M_PI clockwise:YES];
    
    // 开启位图上下文
    UIGraphicsBeginImageContextWithOptions(imageView.frame.size, NO, 0);
    
    [path addClip];
    
    // 绘制图片
    [textImage drawInRect:imageView.frame];
    
    // 获取当前图片
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    
    // 关闭上下文
    
    UIGraphicsEndImageContext();
    
    imageView.image = image;
    
    [self.view addSubview:imageView];
下载demo:

demo下载地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 梦到语文老师在讲台上,好几个中学同学在下面坐着,桌子上有很多书卷子。好像开始上课,又变成了老师让写下这些年想说的话...
    流转SEIMEI阅读 161评论 0 0
  • 嘿,小四,你好吗! 嘿!你好! 什么事这么开心? 啊?我有开心吗? 没有吗?感觉搭话时的语气很轻快呢。 是吗?只是...
    宁如尘FlowEr阅读 460评论 6 2
  • public final class<?> getClass() //返回object的运行时的类。 pub...
    zt110e5阅读 1,869评论 1 3
  • 本周工作大项:1,领军杯开场片修改 2,南昌学员证言 3,海南游开场片制作 1,领军杯修改 : 替换了一些镜头,让...
    企划影视组王亮阅读 151评论 0 0