在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循环任何控制,但在你的情况,而不是设置layer
的UIImageView
它是最好的方式来创build您的图像为圆形,并将其添加到UIImageView
其中有backGroundColor
是ClearColor
。
另请参阅这两个代码的来源。
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=60
和Width = 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; }