0

画像のスライドショーを表示する必要があります。しかし、ある時点では、現在の画像と以前の画像しか知りません (メモリ管理のため)。次の画像をアニメーションで表示する必要があります (ユーザーはアニメーションの種類を選択できます)。しかし、アニメーションは表示されません。アニメーションなしで新しい画像が表示されます。これが私のコードです:

    UIImageView *prevImageView = [self getImageViewWithIndex:currentIndex];
    UIImageView *nowImageView = [self getImageViewWithIndex:newIndex];

    currentIndex = newIndex;
    [UIView animateWithDuration:4 delay:0 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
        [slideShowView addSubview:nowImageView];
    } completion:^(BOOL finished) {
        [prevImageView removeFromSuperview];
    }];

さまざまなアニメーション オプションを試しました。新しい画像を既存の画像ビューに設定しようとしました

nowImageView.image = newImage;

しかし、それは役に立ちませんでした。

4

3 に答える 3

5

ビューの追加または削除、または UIImageView の画像の設定は、 内でアニメーション化できませんanimateWithDuration:...

transitionWithView:...

おそらくあなたがしようとしていたのは、UIView-transition を使用することです (transition オプションを指定したため)。次に、使用する必要があります

transitionWithView:duration:options:animations:completion:

代わりに、次のようにします。

[UIView transitionWithView:slideShowView
                  duration:4.0
                   options:UIViewAnimationOptionTransitionCrossDissolve
                animations:^
                { 
                    [prevImageView removeFromSuperview]; 
                    [slideShowView addSubview:nowImageView]; 
                }
                completion:NULL]; // You don't need the completion if you remove the previous image in the animation block.

animateWithDuraion:...

本当に使用したい場合animateWithDuraion:...(他のアニメーションが同時に発生している可能性があります)、alpha追加するビューのような他のプロパティをアニメーション化してフェードインさせる必要があります。これを行うようにコードを変更すると、何かが見えます。このような。

UIImageView *prevImageView = [self getImageViewWithIndex:currentIndex];
UIImageView *nowImageView = [self getImageViewWithIndex:newIndex];

currentIndex = newIndex;
[slideShowView addSubview:nowImageView];
nowImageView.alpha = 0.0;
[UIView animateWithDuration:4 
                 animations:^
    {
        nowImageView.alpha = 1.0;
    } 
                completion:^(BOOL finished) 
    {
        [prevImageView removeFromSuperview];
    }];
于 2012-06-14T08:33:12.440 に答える
2
[UIView transitionWithView:slideShowView 
                  duration:4.0 
                   options:UIViewAnimationOptionTransitionCrossDissolve 
                animations:^{
                    [prevImagesView removeFromSuperview];
                    [slideShowView addSubview:nowImageView];
                }
                completion:nil];

この場合、slideShowViewはprevImagesViewとnowImagesViewの両方のスーパービューであり、コンテナビューとして機能します。

于 2012-06-14T08:41:23.407 に答える
-1
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationDelay:1.0];

//you can choose type of animation here 

[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

[prevImageView removeFromSuperview]; 
[slideShowView addSubview:nowImageView]; 

[UIView commitAnimations]; // commit your animation

これがあなたを助けることを願っています

于 2012-06-14T08:21:27.797 に答える