【问题标题】:imageview.transform inside UIButton subclass strange behaviourUIButton 子类中的 imageview.transform 奇怪的行为
【发布时间】: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 让它看起来像牙齿。

但在运行时,它看起来像这样

我尝试的是:

  1. 我已经评论了

    self.imageView.transform = CGAffineTransformMakeRotation(self.angle * M_PI / 180.0);
    

然后按钮获得适当的高度宽度,但看起来不太好,因为它们需要旋转

  1. 我已将代码更改为

     self.transform = CGAffineTransformMakeRotation(self.angle * M_PI / 180.0);
    

它有点工作。

那么是我遗漏了什么还是我做错了什么?

【问题讨论】:

  • 您的代码看起来不错!您是否使用自动布局进行设计?可能是自动布局约束中的问题!
  • 是的,我正在使用自动布局,在情节提要中一切似乎都很好,没有约束问题。令人震惊的是,当我从 Xcode 调试视图时,所有视图都正确重新对齐
  • 看起来很奇怪!无论如何,您可以通过清除所有约束并检查结果来尝试一下
  • 图像设置 aspectfit 并清除约束,并再次给它们适当的约束。
  • 你为什么打电话给[self setUpView];在不同的地方这么多次?这是不好的做法。

标签: ios objective-c iphone ios11 ios11.2


【解决方案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);

谢谢;

【讨论】:

  • 能否提供一个有问题的示例项目?
  • 这个解决方案不是建设性的,交换超级方法调用不会改变不正确的旋转尺寸
  • :) 请先尝试一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多