翻转parentView时隐藏子视图

时间:2014-12-11 17:47:06

标签: ios objective-c uiimageview rotation subview

这是我尝试做的事情:

想象一下我的parentView作为书籍封面。该视图具有UIImageView子视图。 我的问题是,当我将parentView翻转180°(我打开书)时,我仍然可以在它前面看到UIImageSubview。我希望我的封面内部只是白色。

我带来的唯一想法是将UIImageView子视图隐藏在旋转的一半但我不认为它真的很聪明。

如果你们可以帮助我,

感谢的

编辑:我实际上正在使用

        [UIView animateWithDuration:someDuration animations:^{
             viewToTransform.layer.transform = CATransform3DRotate(transform,
                         (M_PI * 0.999 * -dir), 0.0, 1.0, 0.0);
       }];

旋转时,我会试着隐藏> PI / 2

我会告诉你更新,

        [UIView animateWithDuration:someDuration animations:^{
             viewToTransform.layer.transform = CATransform3DRotate(transform,
                         (M_PI * 0.999 * -dir), 0.0, 1.0, 0.0);
             _coverImage.hidden = atan2f(viewToTransform.layer.transform.m12, viewToTransform.layer.transform.m11) > M_PI_2 ? YES : NO;
       }];

这不起作用,因为它在动画开始时隐藏了子视图:'(

2 个答案:

答案 0 :(得分:0)

以下代码将允许您在动画完成后隐藏子视图部分。

[UIView animateWithDuration:5.0
  animations:^{
    //Animation code goes here
  } completion:^(BOOL finished) {
    //Code to run once the animation is completed goes here
}];

正如您所看到的,UI视图元素具有在动画之后触发的完成事件,这意味着可以很容易地将其挂钩以执行您需要的操作。

答案 1 :(得分:0)

如果要隐藏图像视图,请尝试以下代码:

[UIView animateWithDuration:someDuration animations:^{
         viewToTransform.layer.transform = CATransform3DRotate(transform,
                     (M_PI * 0.999 * -dir), 0.0, 1.0, 0.0);
   }];

[_coverImage performSelector:@selector(setHidden:) withObject:@YES afterDelay:(someDuration/2)];

更好的解决方案是在翻转动画之后的新UIView animateWithDuration..块中设置图像视图的alpha值,持续时间的一半:

[UIView animateWithDuration:someDuration animations:^{

         viewToTransform.layer.transform = CATransform3DRotate(transform,
                     (M_PI * 0.999 * -dir), 0.0, 1.0, 0.0);
   }];

[UIView animateWithDuration:someDuration/2 animations:^{

         _coverImage.alpha = 0.0f;
   }];