自定义 UIImageView 不起作用
Posted
技术标签:
【中文标题】自定义 UIImageView 不起作用【英文标题】:Custom UIImageView not working 【发布时间】:2013-12-19 12:59:50 【问题描述】:我正在尝试创建一个圆形 UIImageview。为此,我使用 UIBezierPath 的stroke
,颜色为图像。在情节提要中,我将 imageView 的类指定为我的自定义 UIImageView。没用。
这是我的自定义 UIImageView
@implementation CustomImageView
- (id)initWithFrame:(CGRect)frame
self = [super initWithFrame:frame];
if (self)
// Initialization code
return self;
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
UIBezierPath *circularpath = [[UIBezierPath alloc]init];
CGRect Rect = CGRectMake(96, 54, 128, 128);//338
//CGPoint mypoint = CGPointMake(Rect.origin.x + (Rect.size.width / 2), Rect.origin.y + (Rect.size.height / 2));
circularpath = [UIBezierPath bezierPathWithOvalInRect:Rect];
circularpath.lineWidth = 5.0;
[[UIColor blueColor]setStroke];
UIImage *ori = [UIImage imageNamed:@"drogba.jpg"];
UIImage *image = [[UIImage alloc]initWithCGImage:ori.CGImage scale:1.45 orientation:UIImageOrientationUp];
[[UIColor colorWithPatternImage:image]setFill];
NSLog(@"Circular path:%@", circularpath);
[circularpath stroke];
这是我在控制器中的声明方式
@property (weak, nonatomic) IBOutlet CustomImageView *dpImage;
【问题讨论】:
你为什么使用 UIImageView?为什么不只是 UIView?也许这就是问题 我使用 UIImageView 作为它拥有的图像属性 所以不要。将您渲染的图像保存在某个本地实例中,并创建您自己的图像属性。 @AviTsadok,您有理由相信您的建议会有所帮助吗?我没看到。 @vikingosegundo UIImageView 处理的渲染与这里写的不同。如果您需要渲染自己的核心图形代码,UIImageView 不是正确的类。您需要使用常规的 UIView。现在,我不知道这是否是问题所在,但我们需要解决这个问题。 【参考方案1】:不要在UIImageView
子类中实现drawRect:
。
要创建圆形图像视图,请使用标准图像视图并在图像视图层 (cornerRadius
) 上设置边框(borderColor
、borderWidth
)和圆角半径。
对于圆形视图,角半径需要设置为宽度的一半(并且视图显然应该是方形的)。
// image should be squared. otherwise you have to recalculate frame and
// set an appropriate scale fill mode.
UIImageView *imageView =[[UIImageView alloc] initWithImage:image];
imageView.layer.cornerRadius = imageView.frame.size.width /2;
【讨论】:
我尝试了各种值的圆角半径,但我从来没有得到一个完美的圆 @nupac 在下面看到我的答案。角半径应该是图像视图宽度的一半。那么只有你才能得到完美的圆。 @Wain:我希望你不介意我添加了一些代码来说明你的解决方案。 所以诀窍是使用 uiimageview 的一半宽度。谢谢。完美运行。【参考方案2】:您的代码中的错误是:您已完成storking in circular Path
。但是你didn't assign
通往任何layer
的路径。所以它不会出现在视图中。
第二,无需实现 UIImageview 子类。您可以通过使用 UIImageview 的属性层做一些解决方法来创建圆形图像视图。 (cornerradius, borderwidth,bordercolor)
。
这里角半径必须是 UIImageview 宽度的一半。设置好这些图层设置后,就可以初始化图像了。
【讨论】:
以上是关于自定义 UIImageView 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
UIImageView setFrame:在 UITableViewCell 中不起作用
TapGestures 在自定义 TableViewCell 中不起作用
自定义 UITtableViewCell 的布局约束不起作用