亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

UIView無限360度旋轉動畫?

UIView無限360度旋轉動畫?

守著星空守著你 2019-07-31 15:46:34
UIView無限360度旋轉動畫?我正在嘗試旋轉UIImageView360度,并在線查看了幾個教程。我可以讓他們都沒有工作,沒有UIView停止,或跳到一個新的位置。我怎樣才能做到這一點?我嘗試過的最新事情是:[UIView animateWithDuration:1.0                       delay:0.0                     options:0                  animations:^{                      imageToMove.transform = CGAffineTransformMakeRotation(M_PI);                  }                   completion:^(BOOL finished){                      NSLog(@"Done!");                  }];但是如果我使用2 * pi,它根本不會移動(因為它是相同的位置)。如果我嘗試做pi(180度),它可以工作,但如果我再次調用該方法,它會向后旋轉。編輯:[UIView animateWithDuration:1.0                       delay:0.0                     options:0                  animations:^{                      [UIView setAnimationRepeatCount:HUGE_VALF];                      [UIView setAnimationBeginsFromCurrentState:YES];                      imageToMove.transform = CGAffineTransformMakeRotation(M_PI);                  }                   completion:^(BOOL finished){                      NSLog(@"Done!");                  }];也不起作用。它會轉到180度數,暫停一瞬間,然后在重新0開始之前重新設置為度數。
查看完整描述

3 回答

?
有只小跳蛙

TA貢獻1824條經驗 獲得超8個贊

找到一個方法(我修改了一下),對我來說非常有效:iphone UIImageView旋轉

#import <QuartzCore/QuartzCore.h>- (void) runSpinAnimationOnView:(UIView*)view duration:(CGFloat)duration rotations:(CGFloat)rotations repeat:(float)repeat {
    CABasicAnimation* rotationAnimation;
    rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
    rotationAnimation.toValue = [NSNumber numberWithFloat: M_PI * 2.0 /* full rotation*/ * rotations * duration ];
    rotationAnimation.duration = duration;
    rotationAnimation.cumulative = YES;
    rotationAnimation.repeatCount = repeat ? HUGE_VALF : 0;

    [view.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];}


查看完整回答
反對 回復 2019-07-31
?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

我發現他的代碼并不是我所需要的。options我相信默認值是給你UIViewAnimationOptionCurveEaseInOut,在連續動畫中看起來不正確。此外,我添加了一個檢查,以便我可以在需要時(不是無限,但是無限期)在一個偶數四分之一圈停止我的動畫,并使加速度在前90度加速,并在最后90度減速(在要求停止后):

// an ivar for your class:BOOL animating;- (void)spinWithOptions:(UIViewAnimationOptions)options {
   // this spin completes 360 degrees every 2 seconds
   [UIView animateWithDuration:0.5
                         delay:0
                       options:options
                    animations:^{
                       self.imageToMove.transform = CGAffineTransformRotate(imageToMove.transform, M_PI / 2);
                    }
                    completion:^(BOOL finished) {
                       if (finished) {
                          if (animating) {
                             // if flag still set, keep spinning with constant speed
                             [self spinWithOptions: UIViewAnimationOptionCurveLinear];
                          } else if (options != UIViewAnimationOptionCurveEaseOut) {
                             // one last spin, with deceleration
                             [self spinWithOptions: UIViewAnimationOptionCurveEaseOut];
                          }
                       }
                    }];}- (void)startSpin {
   if (!animating) {
      animating = YES;
      [self spinWithOptions: UIViewAnimationOptionCurveEaseIn];
   }}- (void)stopSpin {
    // set the flag to stop spinning after one last 90 degree increment
    animating = NO;}

更新

我添加了處理再次開始旋轉的請求的能力(startSpin),而之前的旋轉正在逐漸減少(完成)。Github上的示例項目。


查看完整回答
反對 回復 2019-07-31
?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

在Swift中,您可以使用以下代碼進行無限循環:

斯威夫特4

extension UIView {
    private static let kRotationAnimationKey = "rotationanimationkey"

    func rotate(duration: Double = 1) {
        if layer.animation(forKey: UIView.kRotationAnimationKey) == nil {
            let rotationAnimation = CABasicAnimation(keyPath: "transform.rotation")

            rotationAnimation.fromValue = 0.0
            rotationAnimation.toValue = Float.pi * 2.0
            rotationAnimation.duration = duration
            rotationAnimation.repeatCount = Float.infinity

            layer.add(rotationAnimation, forKey: UIView.kRotationAnimationKey)
        }
    }

    func stopRotating() {
        if layer.animation(forKey: UIView.kRotationAnimationKey) != nil {
            layer.removeAnimation(forKey: UIView.kRotationAnimationKey)
        }
    }}

斯威夫特3

let kRotationAnimationKey = "com.myapplication.rotationanimationkey" // Any keyfunc rotateView(view: UIView, duration: Double = 1) {
    if view.layer.animationForKey(kRotationAnimationKey) == nil {
        let rotationAnimation = CABasicAnimation(keyPath: "transform.rotation")

        rotationAnimation.fromValue = 0.0
        rotationAnimation.toValue = Float(M_PI * 2.0)
        rotationAnimation.duration = duration
        rotationAnimation.repeatCount = Float.infinity

        view.layer.addAnimation(rotationAnimation, forKey: kRotationAnimationKey)
    }}

停止就像:

func stopRotatingView(view: UIView) {
    if view.layer.animationForKey(kRotationAnimationKey) != nil {
        view.layer.removeAnimationForKey(kRotationAnimationKey)
    }}


查看完整回答
反對 回復 2019-07-31
  • 3 回答
  • 0 關注
  • 900 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號