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 子类@IBAction 不起作用

根据子类中的 UIButton 大小设置cornerRadius 的最佳位置?

UIButton子类在故事板中崩溃[重复]

iPhone:覆盖 UIButton buttonWithType 以返回子类

子类 UIButton 似乎没有初始化