2016-01-13 22 views
0

我正在尝试旋转并移动和缩放字母。类似于本视频,但带有UILabels(每个标签一个字母) https://www.youtube.com/watch?v=rwE6tAQPFuY&feature=youtu.be使用UILabel字母实现旋转,移动,缩放动画效果。 Swift

一个360度旋转,平移运动和一个缩放到同一时间的正常大小。

我管理通过执行以下操作

UIView.animateWithDuration(0.5,延迟,以实现与正常的UIImageView这种效果:0,选择:UIViewAnimationOptions.CurveLinear,动画: { image.frame = CGRectMake(middlePosX ,middlePosY,imageWidth *(1 + ranScale)/ 2,imageHeight *(1 + ranScale)/ 2) image.transform = CGAffineTransformRotate(letterImage.transform,CGFloat的(M_PI))

 }, completion: 
     { _ in 
      UIView.animateWithDuration(0.5, delay: 0, options: UIViewAnimationOptions.CurveLinear, animations: 
       { 

        image.frame = CGRectMake(finalPosX, finalPosY, imageWidth, imageHeight) 
        image.transform = CGAffineTransformRotate(letterImage.transform, CGFloat(M_PI)) 
       }, 
       completion: nil) 

    }) 

然而当使用UILabels该框架没有重置文本的大小。所以,我试图初始变换,然后是本

letterImage.transform = CGAffineTransformScale(letterImage.transform, ranScale, ranScale) 

UIView.animateWithDuration(0.5,延迟:0,选择:UIViewAnimationOptions.CurveLinear,动画: {

 letterImage.frame = CGRectMake(middlePosX, middlePosY, imageWidth, imageHeight) 

     var rotateTransform = CGAffineTransformMakeRotation(CGFloat(M_PI)) 
     var scaleTransform = CGAffineTransformMakeScale((1 + ranScale)/2, (1 + ranScale)/2) 
     letterImage.transform = CGAffineTransformConcat(rotateTransform, scaleTransform) 

    }, completion: 
    { _ in 
     UIView.animateWithDuration(0.5, delay: 0, options: UIViewAnimationOptions.CurveLinear, animations: 
     { 

      letterImage.frame = CGRectMake(finalPosX, finalPosY, imageWidth, imageHeight) 
      letterImage.transform = CGAffineTransformIdentity 
     }, 
     completion: nil) 

    }) 

,但它不达到效果我想..当我将旋转与运动相结合时,它以不同的方式旋转,然后在上一次和结束时,有时它甚至会发生一次异常跳跃。 看起来像这样 https://www.youtube.com/watch?v=CaD1BTwN8Yg&feature=youtu.be

如何使用UILabel字母达到所需的效果?

回答

0

这似乎是个伎俩。 4种不同的CABasicAnimations

let scaleAnimation = CABasicAnimation(keyPath: "transform.scale") 
    scaleAnimation.fromValue = ranScale 
    scaleAnimation.toValue = 1 
    scaleAnimation.duration = 1 
    textLayer.addAnimation(scaleAnimation, forKey: "transform.scale") 


    let rotateAnimation = CABasicAnimation(keyPath: "transform.rotation.z") 

    rotateAnimation.fromValue = 2 * M_PI 
    rotateAnimation.toValue = 0 
    rotateAnimation.duration = 1 
    textLayer.addAnimation(rotateAnimation, forKey: "transform.rotation.z") 

    let moveXAnimation = CABasicAnimation(keyPath: "position.x") 
    moveXAnimation.fromValue = ranX 
    moveXAnimation.toValue = textLayer.position.x 
    moveXAnimation.duration = 1 
    textLayer.addAnimation(moveXAnimation, forKey: "position.x") 


    let moveYAnimation = CABasicAnimation(keyPath: "position.y") 
    moveYAnimation.fromValue = ranY 
    moveYAnimation.toValue = textLayer.position.y 
    moveYAnimation.duration = 1 
    textLayer.addAnimation(moveYAnimation, forKey: "position.y")