在UITableView UIImageView UIImageView没有性能影响?

我在每个UITableView单元上都有一个UIImageView ,它显示一个远程图像(使用SDWebImage )。 我已经做了一些QuartzCore图层视图的样式,如:

 UIImageView *itemImageView = (UIImageView *)[cell viewWithTag:100]; itemImageView.layer.borderWidth = 1.0f; itemImageView.layer.borderColor = [UIColor concreteColor].CGColor; itemImageView.layer.masksToBounds = NO; itemImageView.clipsToBounds = YES; 

所以,现在我有一个带有淡灰色边框的50×50正方形,但是我想把它做成圆形而不是方形。 应用Hemoglobe在桌面视图中使用圆形图像,这就是我想达到的效果。 但是,我不想使用cornerRadius ,因为这会降低我的滚动FPS。

这里是Hemoglobe显示圆形UIImageViews

在这里输入图像说明

有没有办法得到这个效果? 谢谢。

只需将cornerRadius设置为宽度或高度的一半(假设对象的视图是方形的)。

例如,如果你的对象的视图的宽度和高度都是50:

 itemImageView.layer.cornerRadius = 25; 

更新 – 用户atulkhatri指出,如果你不添加:

 itemImageView.layer.masksToBounds = YES; 

添加边框

 self.ImageView.layer.borderWidth = 3.0f; self.ImageView.layer.borderColor = [UIColor whiteColor].CGColor; 

为圆形

 self.ImageView.layer.cornerRadius = self.ImageView.frame.size.width / 2; self.ImageView.clipsToBounds = YES; 

参考这个链接

http://www.appcoda.com/ios-programming-circular-image-calayer/

使用这个代码..这将是有益的..

  UIImage* image = ...; UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, NO, 1.0); // Add a clip before drawing anything, in the shape of an rounded rect [[UIBezierPath bezierPathWithRoundedRect:imageView.bounds cornerRadius:50.0] addClip]; // Draw your image [image drawInRect:imageView.bounds]; // Get the image, here setting the UIImageView image imageView.image = UIGraphicsGetImageFromCurrentImageContext(); // Lets forget about that we were drawing UIGraphicsEndImageContext(); 

这对我来说可以。 🙂

是的,可以给layer.cornerRadius (需要添加#import <QuartzCore/QuartzCore.h>
为创build循环任何控制,但在你的情况,而不是设置layerUIImageView它是最好的方式来创build您的图像为圆形,并将其添加到UIImageView其中有backGroundColorClearColor

另请参阅这两个代码的来源。

https://www.cocoacontrols.com/controls/circleview

https://www.cocoacontrols.com/controls/mhlazytableimages

这可能对您的情况有所帮助:

这里是一个更新的方法在swift中使用IBDesignable和IBInspectable来inheritanceUIImageView

 @IBDesignable class RoundableUIImageView: UIImageView { private var _round = false @IBInspectable var round: Bool { set { _round = newValue makeRound() } get { return self._round } } override internal var frame: CGRect { set { super.frame = newValue makeRound() } get { return super.frame } } private func makeRound() { if self.round == true { self.clipsToBounds = true self.layer.cornerRadius = (self.frame.width + self.frame.height) / 4 } else { self.layer.cornerRadius = 0 } } override func layoutSubviews() { makeRound() } } 

设置的UIImageView的高度和宽度是相同的,例如: Height=60Width = 60 ,那么angularRadad应该是一半。我已经保持在我的情况30。它为我工作。

  self.imageView.layer.cornerRadius = 30; self.imageView.layer.borderWidth = 3; self.imageView.layer.borderColor = [UIColor whiteColor].CGColor; self.imageView.layer.masksToBounds = YES; 

我使用圆形图像视图类…所以我只是用它而不是UIImageView,并没有什么调整…

这个类还在圆圈周围绘制了一个可选的边框。 周围经常有一个边框的图片。

它不是UIImageView的子类,因为UIImageView有它自己的渲染机制,并且不调用drawRect方法。

界面:

 #import <UIKit/UIKit.h> @interface MFRoundImageView : UIView @property(nonatomic,strong) UIImage* image; @property(nonatomic,strong) UIColor* strokeColor; @property(nonatomic,assign) CGFloat strokeWidth; @end 

实现:

 #import "MFRoundImageView.h" @implementation MFRoundImageView -(void)setImage:(UIImage *)image { _image = image; [self setNeedsDisplay]; } -(void)setStrokeColor:(UIColor *)strokeColor { _strokeColor = strokeColor; [self setNeedsDisplay]; } -(void)setStrokeWidth:(CGFloat)strokeWidth { _strokeWidth = strokeWidth; [self setNeedsDisplay]; } - (void)drawRect:(CGRect)rect { CGContextRef ctx = UIGraphicsGetCurrentContext(); CGPathRef path = CGPathCreateWithEllipseInRect(self.bounds, NULL); CGContextAddPath(ctx, path); CGContextClip(ctx); [self.image drawInRect:rect]; if ( ( _strokeWidth > 0.0f ) && _strokeColor ) { CGContextSetLineWidth(ctx, _strokeWidth*2); // Half border is clipped [_strokeColor setStroke]; CGContextAddPath(ctx, path); CGContextStrokePath(ctx); } CGPathRelease(path); } @end 

Swift使用extension可用解决scheme:

 extension UIView{ func circleMe(){ let radius = CGRectGetWidth(self.bounds) / 2 self.layer.cornerRadius = radius self.layer.masksToBounds = true } } 

用法:

 self.venueImageView.circleMe() 

创build圆形图像视图,这很容易与下面的SO链接,只是为您的表视图的自定义单元格,而不是分配cellForRowAtIndexPath方法中的所有东西。

如何在iPhone中使图像背景button圆?

上面的链接给你的button的例子只是用它的图像视图。

如果您使用纯色的背景色来显示图片,则简单的解决scheme可能是在中间使用带有透明圆的重叠图片。

这样,您仍然可以使用方形图像,并在其上添加圆形图像以获得圆形效果。

如果你不需要操作你的图像或者以复杂的背景颜色显示它们,这可以是一个简单的解决scheme,不会影响性能。

在swift中 ,在你的viewDidLoad方法中,用userImage出口:

 self.userImage.layer.borderWidth = 1; self.userImage.layer.borderColor = UIColor.whiteColor().CGColor; self.userImage.layer.cornerRadius = self.userImage.frame.size.width / 2; self.userImage.clipsToBounds = true; 

在Swift中使用这个扩展的CircularImageView或RoundedImageView:

 extension UIView { func circular(borderWidth: CGFloat = 0, borderColor: UIColor = UIColor.whiteColor()) { let radius = CGRectGetWidth(self.bounds) / 2 self.layer.cornerRadius = radius self.layer.masksToBounds = true self.layer.borderWidth = borderWidth self.layer.borderColor = borderColor.CGColor } func roundedCorner(borderWidth: CGFloat = 0, borderColor: UIColor = UIColor.whiteColor()) { let radius = CGRectGetWidth(self.bounds) / 2 self.layer.cornerRadius = radius / 5 self.layer.masksToBounds = true self.layer.borderWidth = borderWidth self.layer.borderColor = borderColor.CGColor } } 

用法:

 self.ImageView.circular() self.ImageView.roundedCorner() 

如果使用一些自动布局和不同的单元格高度,最好这样做:

  override func layoutSubviews() { super.layoutSubviews() logo.layer.cornerRadius = logo.frame.size.height / 2; logo.clipsToBounds = true; }