访问UIButton的背景图像的UIImageView

时间:2016-07-04 23:05:40

标签: ios objective-c uiimageview uibutton

我有一个UIButton,我想访问其背景图像的UIImageView,以便我可以使图像循环。我知道我可以影响图像本身,但我更愿意更优雅地做到这一点。我也知道我可以使用button.currentBackgroundImage属性在后台获取UIImage,但我想要视图本身。一旦我有了视图,我打算使用这段代码:

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

如何访问buttonImageView?

编辑: 由于@ vhristoskov的建议,我尝试使用以下代码裁剪按钮:

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

它形成了这个形状:

enter image description here

调试后我发现frame.size.width是46,应该是100.所以我尝试了这个代码:

self.button.layer.cornerRadius = self.button.currentBackgroundImage.size.width/2;
self.button.clipsToBounds = YES;

这产生了这种形状:

enter image description here

而这一次,cornerRadius被设置为65.所以看起来我的问题实际上是我现在没有正确的宽度。我应该访问哪个属性才能获得正确的数字?

2 个答案:

答案 0 :(得分:0)

假设您调用了类似的内容:

[self.myButton setBackgroundImage:[UIImage imageNamed:@"image"] forState:UIControlStateNormal];

在viewDidLoad或更早版本中,您可以在viewDidAppear中调用以下内容:

if (self.myButton.subviews.count > 0 && [self.myButton.subviews[0] isKindOfClass:[UIImageView class]]) {
    UIImageView *imageView = self.myButton.subviews[0];
    imageView.layer.cornerRadius = imageView.frame.size.width / 2;
    imageView.clipsToBounds = YES;
}

但它不是更优雅,因为子视图排序是UIButton的实现细节,并且可能随时更改。

答案 1 :(得分:0)

正如我猜测的那样,你已经找到了 - 问题出在按钮大小上。确保按钮在运行时的大小符合您的预期 - 检查您的约束。在下面的示例中,按钮具有垂直和水平中心对齐以及固定的宽度和高度。

Button Constraints

约束:

enter image description here

要拥有完美的圆形按钮,您应该拥有button.width == button.height。如果满足这个条件,您的代码应该像魅力一样:

self.button.layer.cornerRadius = CGRectGetWidth(self.button.frame) / 2;
self.button.clipsToBounds = YES;

enter image description here