做iOS开发的时候有可能经常碰到莫名其妙的滑动不顺畅(在UIScrollView以及其子类)或者在navigation切换的时候不顺畅的问题,这很有可能是在界面中加了太多带圆角并且masksToBounds为YES的UIView而引起的。
暂时所有版本的api都没有解决这个问题。因此如果想要避免这个问题,只能放弃在UIView上加圆角,如果该View是用来显示图片的,则可以将该UIView上的图片本身加圆角。
static void addRoundedRectToPath(CGContextRef context, CGRect rect, float ovalWidth,
float ovalHeight)
{
float fw, fh;
if (ovalWidth == 0 || ovalHeight == 0) {
CGContextAddRect(context, rect);
return;
}
CGContextSaveGState(context);
CGContextTranslateCTM(context, CGRectGetMinX(rect), CGRectGetMinY(rect));
CGContextScaleCTM(context, ovalWidth, ovalHeight);
fw = CGRectGetWidth(rect) / ovalWidth;
fh = CGRectGetHeight(rect) / ovalHeight;
CGContextMoveToPoint(context, fw, fh/2); // Start at lower right corner
CGContextAddArcToPoint(context, fw, fh, fw/2, fh, 1); // Top right corner
CGContextAddArcToPoint(context, 0, fh, 0, fh/2, 1); // Top left corner
CGContextAddArcToPoint(context, 0, 0, fw/2, 0, 1); // Lower left corner
CGContextAddArcToPoint(context, fw, 0, fw, fh/2, 1); // Back to lower right
CGContextClosePath(context);
CGContextRestoreGState(context);
}
+ (id) createRoundedRectImage:(UIImage*)image size:(CGSize)size
{
// the size of CGContextRef
int w = size.width;
int h = size.height;
UIImage *img = image;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 4 * w, colorSpace, kCGImageAlphaPremultipliedFirst);
CGRect rect = CGRectMake(0, 0, w, h);
CGContextBeginPath(context);
addRoundedRectToPath(context, rect, 10, 10);
CGContextClosePath(context);
CGContextClip(context);
CGContextDrawImage(context, CGRectMake(0, 0, w, h), img.CGImage);
CGImageRef imageMasked = CGBitmapContextCreateImage(context);
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
return [UIImage imageWithCGImage:imageMasked];
}
将UIView上的图片用该方法处理一次,就可以获得带了圆角的图片了。
分享到:
相关推荐
在iOS应用开发中,视图的圆角处理是一项常见的需求,而Swift-DBCorner则为此提供了简洁且高效的解决方案。 首先,让我们深入了解一下如何使用Swift-DBCorner来实现圆角效果。在Swift中,通常我们通过修改`layer....
在Swift或Objective-C编程中,我们可以直接操作UIView的layer属性来改变其视觉效果,包括添加圆角和阴影。`CALayer`是所有视图的基础,它提供了许多自定义外观的选项,如`cornerRadius`(圆角)和`shadow*`属性...
基于UIView扩展的类目,用于设置上下左右圆角,可设置单边圆角,也可设置为圆形 github地址:https://github.com/LQQZYY/UIViewCornerDemo 喜欢的话就给颗星支持一下,感谢!
本教程将深入探讨如何使用扩展(Extension)和运行时(Runtime)技术,为UIView类添加手势识别功能,从而实现更丰富的用户交互体验。 首先,让我们了解什么是扩展。在Objective-C和Swift中,扩展是一种可以为已存在...
在Swift编程中,UI设计是应用开发不可或缺...通过自定义绘制流程,它提供了一种无离屏渲染的圆角解决方案,提高了应用性能和用户体验。对于那些重视性能优化和用户界面流畅性的开发者来说,这是一个非常有价值的工具。
在Swift编程语言中,对UIView或UIImage进行高性能的圆角处理和生成渐变色图片是常见的图像操作。这些操作在用户界面设计中尤其重要,因为它们可以提升应用的视觉效果和用户体验。以下将详细介绍如何实现这些功能。 ...
在Swift编程中,创建一个带有圆角和阴影的UIView是一个常见的需求,这通常涉及到自定义视图的外观,以提供更美观的用户界面。在iOS应用开发中,我们可以利用UIKit框架提供的API来实现这一功能。以下就是如何在Swift...
首先,我们可以通过设置UIView的layer属性来实现视图的圆角效果。UIView的layer是一个CALayer对象,它支持自定义的几何形状,包括设置圆角。你可以使用`layer.cornerRadius`属性来指定视图的圆角半径。以下是一个...
`UIView+RectCorner`是一个自定义的类别(Category),它为`UIView`添加了额外的功能,使我们能够轻松地为视图添加圆角,而无需深入到图形上下文(Graphics Context)或使用`UIBezierPath`进行复杂的操作。...
在iOS应用开发中,我们经常会遇到需要为UIView添加边框颜色以及设置圆角边框的需求。这不仅可以提升界面的美观度,还能帮助用户更清晰地识别UI元素。本篇文章将详细讲解如何在Objective-C中实现这些功能。 首先,...
UIView 动画 UIView动画
在iOS开发中,`UIView`是构建用户界面的基础,几乎所有的可见元素都基于它。`UIView`不仅负责绘制和显示内容,还处理用户的交互事件。以下是对标题和描述中涉及的`UIView`知识点的详细解释: 1. **Bounds和Frame的...
而`UIView`的圆角化是常见的需求,能够使界面看起来更加美观和专业。本教程将深入探讨如何使用Objective-C来实现`UIView`各个角的圆角化,主要涉及`UIBezierPath`类以及其在圆角处理中的应用。 首先,`UIBezierPath...
在iOS开发中,经常需要将一个UIView对象的内容转化为图片,以便于分享、存储或进行其他图形操作。这个过程涉及到的主要知识点是UIView的渲染和图片处理。以下是对这一主题的详细阐述。 首先,UIView是一个用于在...
本文将深入探讨如何在iOS中实现UIView的渐变效果,并介绍一个已经封装好的解决方案,允许开发者轻松地在应用中添加渐变色。 首先,我们需要理解渐变色的基本概念。渐变色是指从一种颜色平滑过渡到另一种颜色的过程...
源码SkyRadiusView,实现view背景色的四个边角自定义成圆角 使用方法 使用方法很简单,只需要在xib或StoryBoard中继承SkyRadiusView,并设置参数即可 详情请参考项目中的示例代码 和 gif图片 测试环境:Xcode 6,...
UIView的生命周期对于理解iOS应用中视图的加载和管理至关重要。在开发iOS应用时,了解UIView及其子类的生命周期方法,可以让开发者合理地安排资源的分配和释放,优化应用的性能,以及提供更好的用户体验。 首先,...
`UIView AutoLayout`是这个机制的一个扩展,为`UIView`类添加了分类,提供了更加简洁易用的接口来设置自动布局约束。这个压缩包"UIView AutoLayout.zip"包含的项目名为"UIView-AutoLayout-master",很可能是GitHub上...
"IOS设置UIView的边框为圆角详解及实例" 本文主要介绍了IOS设置UIView的边框为圆角的相关知识点,通过使用QuartzCore库,实现UIView的边框设置为圆角,添加边框、背景图片等功能。 一、IOS设置UIView的边框为圆角...
UIView+Extension 对view的一个扩展