objective-c - 尝试制作圆角 UIImage 时的性能问题(使用 mask )

标签 objective-c c ios7 core-animation

我开发了从矩形 UIImage 到圆形的方法。问题是,如果连续对 10 个不同的图像执行该操作,则会降低性能。图片分辨率为 120x120

- (UIImage *)roundedImage:(UIImage*)anOriginalImage radius:(CGFloat)aRadius
{
    UIImage *result = nil;

    if (anOriginalImage != nil) {

        UIGraphicsBeginImageContextWithOptions(anOriginalImage.size, NO, 0);
        [[UIBezierPath bezierPathWithRoundedRect:(CGRect){CGPointZero, anOriginalImage.size}
                                    cornerRadius:aRadius] addClip];
        [anOriginalImage drawInRect:(CGRect){CGPointZero, anOriginalImage.size}];
        result = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    }

    return result;
}

如何解决这个问题?

最佳答案

导入 QuartzCore 框架以访问 UIView 或 UIImageView 的 .cornerRadius 属性。

#import <QuartzCore/QuartzCore.h>

还可以手动将其添加到项目的 Frameworks 文件夹中。

将此方法添加到您的 View Controller 或任何您需要的地方:

-(void)setRoundedView:(UIImageView *)roundedView toDiameter:(float)newSize;
{
CGPoint saveCenter = roundedView.center;
CGRect newFrame = CGRectMake(roundedView.frame.origin.x, roundedView.frame.origin.y, newSize, newSize);
roundedView.frame = newFrame;
roundedView.layer.cornerRadius = newSize / 2.0;
roundedView.center = saveCenter;
}

要使用它,只需向其传递一个 UIImageView 和一个直径。此示例假设您有一个名为“circ”的 UIImageView 作为 subview 添加到您的 View 中。它应该设置一个背景颜色,以便您可以看到它。

[self setRoundedView:circ toDiameter:100.0];

这仅处理 UIImageViews,但您可以将其推广到任何 UIView。

关于objective-c - 尝试制作圆角 UIImage 时的性能问题(使用 mask ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21650064/

相关文章:

objective-c - 如何使用 NSXMLParser 解析 XML 文件

objective-c - 在 Swift 中调用 Obj-C 多输入方法

validation - iOS7 中非消耗性产品的服务器端收据验证和 transactionReceipt 弃用

objective-c - 我如何向用户请求麦克风录音权限

ios7 - iOS 7 如何让导航栏和状态栏背景相同?

iphone - 短信编写窗口类似搜人的控件

objective-c - NSView 子类中的可选文本

c - C语言中如何截去小数而不进行四舍五入

c - 在 C 中读取和输出 unicode

c - Scanf 和循环