2016-07-04 65 views
0

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

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所以它实际上好像我的问题是,我没有正确的宽度在此刻。我应该访问哪个属性才能获取正确的编号?

+0

有什么理由不能直接应用相同的代码添加到您的UIButton? – vhristoskov

+0

@vhristoskov嗯我刚刚试过,我得到了一个奇怪的结果,形象奇怪的形状。如果你愿意,我可以添加一个关于我的问题发生了什么的截图。 – multitaskPro

+0

这会很好。您还可以在IB中添加约束图像(或者您用来设置按钮框架的代码)。 – vhristoskov

回答

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

+0

所以事实证明,我的问题是试图让viewDidLoad按钮的宽度,显然宽度只有在viewDidAppear有效。无论如何,我将接受这个答案,因为它包含了我的解决方案的要点。感谢所有的帮助:) – multitaskPro

0

假设你叫这样的:在viewDidLoad中

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

或更早的版本,则可以调用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的实现细节,并可能随时更改。

+0

看起来像UIButton实际上没有任何子视图:/ – multitaskPro

+0

我发现子视图只能通过viewDidAppear添加,但还没有出现在viewDidLoad时间。这可能取决于首次设置背景图像的时间。 –