我有一个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];
视图具有以下约束:
我想通过翻转它来为视图设置动画。我尝试了两种方法来做到这一点。
方法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
的截图视图中的图像被切成两半,仍然可见的一半翻转。
UIView和UIImageView的约束
答案 0 :(得分:0)
UIImageView
限制存在问题。为了在UIImageView
内获得完整UIView
,您需要设置以下约束。
输出是:
希望这对你有所帮助。
答案 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;
}