0

ビューを開いたり閉じたりするために使用したいボタンがあります...

矢印です。開くと矢印が180°回転します。

そして閉じるとき、それは180°後ろに回転するはずです。

ただし、開いている間は1回だけ回転しますが、閉じたときに再び回転することはありません。さらに、もう一度開くと、最初に開いても再び回転しません。

コードは次のとおりです。

    - (id)initWithFrame:(CGRect)frame
    {
        mediaOpened = NO;
        media   = [UIButton buttonWithType:UIButtonTypeCustom];
        [media retain];
        [media setBackgroundImage:[ImageController getImageNamed:@"arrow.png"] forState:UIControlStateNormal];
        [media addTarget:self action:@selector(toggleMedia) forControlEvents:UIControlEventTouchUpInside];
        media.frame = CGRectMake(2, 10, 26, 17);
        [self addSubview:media];
    }

    -(void) rotateMedia {
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationBeginsFromCurrentState:YES];
        [UIView setAnimationDuration:0.3];

        float   angle = M_PI;
        media.transform = CGAffineTransformMakeRotation(angle);

        [UIView commitAnimations];
    }

    -(void) mediaClicked {
        if (self.delegate != nil) 
            [self.delegate mediaClicked];

        [self rotateMedia];
    }

    -(void) mediaUnclicked {    
        if (self.delegate != nil)
            [self.delegate mediaUnClicked];

        [self rotateMedia];
    }

    -(void) toggleMedia {
        if (!mediaOpened)
            [self mediaClicked];
        else
            [self mediaUnclicked];
        mediaOpened = !mediaOpened;
    }
4

1 に答える 1

2

次の行を追加します。

media.transform = CGAffineTransformIdentity; // Add this line to reset from current angle
media.transform = CGAffineTransformMakeRotation(angle);

回転を適用する前に。これにより、現在の位置から回転します。それ以外の場合は、常に同じ位置から開始します。あなたがしているのはその角度に回転していて、その角度になったら、連続するアニメーションはすでにある位置にアニメーション化しようとしているので、アニメーションはありません。

于 2013-01-14T17:46:08.977 に答える