2012-04-20 105 views
11

我有一個UIView陰影和UIImageView子視圖。平滑地旋轉和改變陰影UIView的大小

我想在iPad旋轉時調整視圖大小,並且我正在嘗試在willRotateToInterfaceOrientation回調中執行此操作。

如果我以基本方式在UIView上設置陰影,旋轉非常不連貫;所以我想從其他人那裏得到一些關於如何設置陰影設置layer.shadowPath的建議。

我嘗試使用[UIView animateWithDuration:animations]設置動畫幀大小更改並在同一個塊中設置新的shadowPath,但陰影路徑捕捉到新的大小。

如果我不更改動畫塊中圖層的shadowPath,它不會更改。

從我所做的一些搜索中,動畫更改圖層屬性需要使用CABasicAnimation完成。

所以我認爲這個問題可能是「我如何動畫一個UIView的幀大小和圖層變化同時?

回答

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;