翻转受自动布局限制的圆形UIView

时间:2015-04-27 06:40:09

标签: ios objective-c uiview autolayout uiviewanimation

我有一个UIView,我已按以下方式发出通知。

view.layer.cornerRadius = view.frame.size.width / 2;
view.clipsToBounds = YES;

我在视图中有一个填充视图的UIImageView。

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, view.frame.size.width, view.frame.size.height)];
imageView.contentMode = UIViewContentModeScaleAspectFill;
[view addSubview: imageView];

视图具有以下约束:

  • 水平居中
  • 固定宽度/高度
  • 底部空间= -50

我想通过翻转它来为视图设置动画。我尝试了两种方法来做到这一点。

方法1:使用 transitionWithView:

这会导致在翻转动画时显示完整图像(图像丢失了纵横填充,看起来好像图像正在视图中翻转而不是视图本身)。

[UIView transitionWithView:view duration:1.0 options:UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationOptionShowHideTransitionViews animations:^{
} completion:nil];

方法2:应用图层转换

这导致一个非常错误的动画,其中一半的视图控制器被切断。我相信这可能是由于自动布局中的限制。

[UIView animateWithDuration:1.0 animations:^{
    view.layer.transform = CATransform3DMakeRotation(M_PI,0.0,1.0,0.0);
}];

如何实现视图的平滑翻转动画,同时牢记视图的约束和图像子视图?

使用方法1

的截图

以下是子视图的原始视图

这就是翻转动画中间的样子

使用方法2

的截图

视图中的图像被切成两半,仍然可见的一半翻转。

enter image description here

UIView和UIImageView的约束

enter image description here enter image description here

2 个答案:

答案 0 :(得分:0)

UIImageView限制存在问题。为了在UIImageView内获得完整UIView,您需要设置以下约束。

enter image description here

输出是:

enter image description here

希望这对你有所帮助。

答案 1 :(得分:0)

这对我有用。确保在 viewDidLayoutSubviews 中调用它。

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    [self makeImageRound]; // call it here to make perfect circle
}


- (void)makeImageRound
{
    self.profileView.layer.cornerRadius = self.profileView.frame.size.width / 2;
    self.profileView.layer.borderWidth = 0.0f;
    self.profileView.layer.borderColor = [UIColor whiteColor].CGColor;
    self.profileView.clipsToBounds = YES;
    self.profileView.layer.masksToBounds = true;
}