12

我有UIView一个阴影和一个 UIImageView 子视图。

我想在 iPad 旋转时调整视图大小,并且我试图在willRotateToInterfaceOrientation回调中执行此操作。

如果我以基本方式设置阴影,UIView旋转会非常不稳定;所以我想从其他人那里得到一些关于如何设置阴影设置 layer.shadowPath 的建议。

我已经尝试使用动画帧大小更改并在同一块中[UIView animateWithDuration:animations]设置新的,但阴影路径会捕捉到新的大小。shadowPath

如果我不改变动画块中图层的 shadowPath,它就不会改变。

从我所做的一些搜索中,需要使用CABasicAnimation.

所以我认为问题可能是“如何同时为 UIView 的帧大小和图层更改设置动画?”

4

1 回答 1

8

代码比人们希望的要多,但是这样的东西应该可以工作。

  CGFloat animationDuration = 5.0;

  // Create the CABasicAnimation for the shadow
  CABasicAnimation *shadowAnimation = [CABasicAnimation animationWithKeyPath:@"shadowPath"];
  shadowAnimation.duration = animationDuration;
  shadowAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; // Match the easing of the UIView block animation
  shadowAnimation.fromValue = (id)self.shadowedView.layer.shadowPath;

  // Animate the frame change on the view
  [UIView animateWithDuration:animationDuration
                        delay:0.0f
                      options:UIViewAnimationCurveEaseInOut
                   animations:^{
                     self.shadowedView.frame = CGRectMake(self.shadowedView.frame.origin.x,
                                                          self.shadowedView.frame.origin.y,
                                                          self.shadowedView.frame.size.width * 2.,
                                                          self.shadowedView.frame.size.height * 2);
                   } completion:nil];

  // Set the toValue for the animation to the new frame of the view
  shadowAnimation.toValue = (id)[UIBezierPath bezierPathWithRect:self.shadowedView.bounds].CGPath;

  // Add the shadow path animation
  [self.shadowedView.layer addAnimation:shadowAnimation forKey:@"shadowPath"];

  // Set the new shadow path
  self.shadowedView.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.shadowedView.bounds].CGPath;
于 2012-08-08T00:57:52.370 回答