访问UIButton的背景图像的UIImageView
我有一个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;
,这让这种形状:
调试我发现后frame.size.width是46,当它应该是100.所以我试着这个代码代替:
self.button.layer.cornerRadius = self.button.currentBackgroundImage.size.width/2;
self.button.clipsToBounds = YES;
和产生这种形状:
而这个时候,cornerRadius
被设定为65所以它实际上好像我的问题是,我没有正确的宽度在此刻。我应该访问哪个属性才能获取正确的编号?
好吧,我猜,你已经发现 - 问题是在按钮的大小。要确保您的按钮在运行时的大小是您所期望的 - 检查您的约束。在下面的例子中,按钮具有垂直和水平的中心对齐以及固定的宽度和高度。
约束:
为了有完美的圆形按钮,你应该有button.width == button.height
。如果这一条件得到满足你的代码应该像一个魅力:
self.button.layer.cornerRadius = CGRectGetWidth(self.button.frame)/2;
self.button.clipsToBounds = YES;
所以事实证明,我的问题是试图让viewDidLoad按钮的宽度,显然宽度只有在viewDidAppear有效。无论如何,我将接受这个答案,因为它包含了我的解决方案的要点。感谢所有的帮助:) – multitaskPro
假设你叫这样的:在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的实现细节,并可能随时更改。
看起来像UIButton实际上没有任何子视图:/ – multitaskPro
我发现子视图只能通过viewDidAppear添加,但还没有出现在viewDidLoad时间。这可能取决于首次设置背景图像的时间。 –
有什么理由不能直接应用相同的代码添加到您的UIButton? – vhristoskov
@vhristoskov嗯我刚刚试过,我得到了一个奇怪的结果,形象奇怪的形状。如果你愿意,我可以添加一个关于我的问题发生了什么的截图。 – multitaskPro
这会很好。您还可以在IB中添加约束图像(或者您用来设置按钮框架的代码)。 – vhristoskov