在iOS中创建带圆形边框的UIImageView

3

我尝试使用cornerRadius创建一个围绕着我的UIImageView的边框,使其成为一个完美的圆形。但是,所有我查看的资料都说我的代码是正确的,但是它返回的却更像一个菱形(我已经导入了QuartzCore,不确定是否需要)。

image.layer.cornerRadius = (image.bounds.size.width/2);
image.layer.borderWidth = 5;
image.layer.borderColor = [UIColor whiteColor].CGColor;

有什么想法吗?

这里的高度和宽度应该相同,以使其成为圆形。 - Paresh Navadiya
UIImageView被限制为相同的宽度和高度。 - work_gg
4个回答

4
image.layer.cornerRadius = image.frame.size.width /2;
image.layer.masksToBounds = YES;
image.layer.borderWidth = 5;
image.layer.borderColor = [UIColor whiteColor].CGColor;

您的ImageView的高度和宽度必须相等。

1

您尝试添加了吗:

image.layer.masksToBounds = YES;

另外一件事:你的图片宽度是否等于其高度?


UIImageView的宽度和高度相等,而image.layer.masksToBounds = YES对我无效。 - work_gg

0

更简单的方法,不需要编码。在你的Storyboard中选择你的UIImageView,然后在Identity Inspector下检查右侧的列,在User Defined Runtime Attribute下添加一个数字和关键路径:layer.cornerRaius Neber 150或其他任何值,然后使用你的代码实现,看一下屏幕:

enter image description here enter image description here

现在你的代码和:

enter image description here

如果你想使用你的代码,你可以使用相同的方法:

//your code:

image.layer.cornerRadius = (image.bounds.size.width/2);
image.layer.borderWidth = 5;
image.layer.borderColor = [UIColor whiteColor].CGColor;

//improve with:

    CGFloat radius = 150.0f;
    self.image.layer.cornerRadius = radius;

你可以为通用应用程序添加一个函数,就像这个例子一样:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.image.layer.masksToBounds = YES;
    self.image.layer.borderWidth = 5;
    self.image.layer.borderColor = [UIColor whiteColor].CGColor;

    if (isIpnoe4 || isIphone5) {

    CGFloat radius = 150.0f;

    } else if (isIphone6) {

        CGFloat radius = 200.0f;

    } else if (isIphone6Plus) {

        CGFloat radius = 250.0f;

    } else {

        //here is ipad/ipadmini

        CGFloat radius = 250.0f;
    }
    self.image.layer.cornerRadius = radius;
}

您可以使用以下方法在Prefix.pch文件或头文件中定义不同的显示:

#define   IsIphone6Plus     ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )1104 ) < DBL_EPSILON )
#define   IsIphone6     ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )667 ) < DBL_EPSILON )
#define   IsIphone5     ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )
#define   IsIphone4     ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )480 ) < DBL_EPSILON )

希望这能帮到你。

这看起来不错,但是UIImageView是用于通用应用程序的,并且被限制在UIViewController的顶部、左侧和右侧,因此它的大小总是不同的。 - work_gg
谢谢,我改进了我的答案,提供了在通用模式下执行该操作的另一种方法。 - BlackSheep

0

步骤(1) 正如其他人所说,您需要确保宽度和高度的值完全相同。如果您绝对确定这是正确的,请转到第2步。

步骤(2) 即使您认为自己绝对确定了第1步,通常情况下也不是这样。我从自己尝试做同样事情的经验中说出这句话。您会惊讶于AutoLayout在运行时对您的尺寸所做的一些疯狂的事情。即使您认为您的值是正确的,它们也会稍微改变。让我猜猜,您是否使用Storyboard创建ImageView?如果是,请转到第3步。

步骤(3) 为了验证此问题是由AutoLayout做某些有趣的事情引起的,请通过以下方式在代码中创建一个测试UIImageView,而不使用任何Stroyboards(我现在不在我的Mac上,因此语法可能有点错误):

var imageView: UIImageView = UIImageView(frame: CGRect(x: 0.0, y: 0.0, width: 100.0 height: 100.0))
imageView.layer.cornerRadius = (imageView.bounds.size.width/2)
imageView.layer.borderWidth = 5.0
imageView.layer.borderColor = UIColor.redColor()
imageView.backgroundColor = UIColor.yellowColor()
self.view.addSubview(imageView)

如果你运行这个程序,它显示为一个正确的圆形。那么这就是你问题的原因。我已经学会了现在严格使用代码创建所有的对象,我甚至不再使用Storyboards,因为我过去遇到的所有问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接