UIButton 子类中的 imageview.transform 奇怪的行为
Posted
技术标签:
【中文标题】UIButton 子类中的 imageview.transform 奇怪的行为【英文标题】:imageview.transform inside UIButton subclass strange behaviour 【发布时间】:2018-03-28 15:14:18 【问题描述】:我创建了一个 UIButton
子类并添加了一个 IBInspectable 属性,该属性在 UIButton
内旋转 imageView
。在 InterfaceBuilder 中似乎一切正常,但在运行时,它的行为很奇怪。
这是我的代码
MyButton.m
@implementation MyButton
-(void)awakeFromNib
[super awakeFromNib];
[self setUpView];
-(void)layoutSubviews
[self setUpView];
[super layoutSubviews];
-(void)prepareForInterfaceBuilder
[self setUpView];
-(void)setUpView
self.transform = CGAffineTransformMakeRotation(self.angle * M_PI / 180.0);
@end
在 Main.storyboard 中如下所示
我在这里所做的是我使用了 32 MyButton 让它看起来像牙齿。
但在运行时,它看起来像这样
我尝试的是:
我已经评论了
self.imageView.transform = CGAffineTransformMakeRotation(self.angle * M_PI / 180.0);
然后按钮获得适当的高度宽度,但看起来不太好,因为它们需要旋转
我已将代码更改为
self.transform = CGAffineTransformMakeRotation(self.angle * M_PI / 180.0);
它有点工作。
那么是我遗漏了什么还是我做错了什么?
【问题讨论】:
您的代码看起来不错!您是否使用自动布局进行设计?可能是自动布局约束中的问题! 是的,我正在使用自动布局,在情节提要中一切似乎都很好,没有约束问题。令人震惊的是,当我从 Xcode 调试视图时,所有视图都正确重新对齐 看起来很奇怪!无论如何,您可以通过清除所有约束并检查结果来尝试一下 图像设置 aspectfit 并清除约束,并再次给它们适当的约束。 你为什么打电话给[self setUpView];在不同的地方这么多次?这是不好的做法。 【参考方案1】:我认为问题在于秩序。在setUpView之后调用layoutSubviews,扰乱了UIImageView。
所以尝试一个小的修复。用这个改变你的布局子视图方法;
-(void)layoutSubviews
[super layoutSubviews]; // Supper layoutSubviews should be on top
[self setUpView]; // and then customization
所以现在你应该可以像这样转换你的 imageView 了;
self.imageView.transform = CGAffineTransformMakeRotation(self.angle * M_PI / 180.0);
谢谢;
【讨论】:
能否提供一个有问题的示例项目? 这个解决方案不是建设性的,交换超级方法调用不会改变不正确的旋转尺寸 :) 请先尝试一下。以上是关于UIButton 子类中的 imageview.transform 奇怪的行为的主要内容,如果未能解决你的问题,请参考以下文章
UITableViewCell 子类中的 UIButton 未注册点击
根据子类中的 UIButton 大小设置cornerRadius 的最佳位置?