1

やあ、

2 つの異なる画像間で UIButton の画像をアニメーション化しようとしています。

赤と黒の 2 つの正方形の画像があるとします。

ボタンに触れると、uibutton の画像が両方の画像からスムーズなアニメーションでループするようにします。

ループ アニメーションは、ユーザーがボタンをタッチダウンするたびに開始し、内側を上にタッチするか出口をドラッグするとキャンセルする必要があります。

これが私が今していることです:

-(void)startAnimation:(UIButton *)obj {
    [UIView animateWithDuration:1 delay:0 options:(UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat) animations:^{
        [obj setAlpha:0];
        [obj setImage:[UIImage imageNamed:@"animated_on"] forState:UIControlStateNormal];
        [obj setImage:[UIImage imageNamed:@"animated_on"] forState:UIControlStateHighlighted];
        [obj setImage:[UIImage imageNamed:@"animated_on"] forState:UIControlStateDisabled];
        [obj setImage:[UIImage imageNamed:@"animated_on"] forState:UIControlStateSelected];
    } completion:^(BOOL finished) {
        [obj setAlpha:1];
        [obj setImage:nil forState:UIControlStateNormal];
        [obj setImage:nil forState:UIControlStateHighlighted];
        [obj setImage:nil forState:UIControlStateDisabled];
        [obj setImage:nil forState:UIControlStateSelected];        

    }];   
}

-(void)stopAnimation:(UIButton *)obj {
   [obj.layer removeAllAnimations]; 
}

- (void)touchDownAnimation:(id)obj {    
    [self startAnimation:obj];
}

- (void)dragEnterAnimation:(id)obj {
    [self startAnimation:obj];
}
- (void)dragExitAnimation:(id)obj {
    [self stopAnimation:obj];
}

- (void)touchUpInsideAnimation:(id)obj {
    [self stopAnimation:obj];
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    CGRect frame = CGRectMake(110, 180, 100, 100);

    UIImageView *animatedButtonBackground = [[UIImageView alloc] initWithFrame:frame];
    [animatedButtonBackground setImage:[UIImage imageNamed:@"animated_off"]];

    [self.view addSubview:animatedButtonBackground];

    UIButton *animatedButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [animatedButton setFrame:frame];

    [animatedButton addTarget:self action:@selector(touchDownAnimation:) forControlEvents:UIControlEventTouchDown];
    [animatedButton addTarget:self action:@selector(dragEnterAnimation:) forControlEvents:UIControlEventTouchDragEnter];
    [animatedButton addTarget:self action:@selector(dragExitAnimation:) forControlEvents:UIControlEventTouchDragExit];    
    [animatedButton addTarget:self action:@selector(touchUpInsideAnimation:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:animatedButton];

}

それはちょっとうまくいきますが、プロセスに UIImageView を含めることは、私がやりたいことをするための悪いトリックのように見えます...

よりクリーンなソリューションを探しています。

4

1 に答える 1

1

もっと簡単なものを使用できるかどうか疑問に思います:

button.imageView.animationImages = [NSArray arrayWithObjects:
                                    [UIImage imageNamed:@"image1"],
                                    [UIImage imageNamed:@"image2"],
                                    nil];
button.imageView.animationDuration = 1;
[button.imageView startAnimating];
于 2012-07-31T12:37:32.227 に答える