自定义 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) 上设置边框(borderColorborderWidth)和圆角半径。


对于圆形视图,角半径需要设置为宽度的一半(并且视图显然应该是方形的)。

// 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 中不起作用

滑动手势在 UITableViewCell 中不起作用

TapGestures 在自定义 TableViewCell 中不起作用

自定义 UITtableViewCell 的布局约束不起作用

在表格视图单元格中加载和缓存多个 UIImageView 不起作用

UIView 块动画不起作用