1

イメージ 1 を表示する小さなコードがあり、2 秒後にイメージ 1 をイメージ 2 に置き換えて、以下のアニメーションに置き換えます。

UIImageView *view1 = [[UIImageView alloc] initWithFrame:CGRectMake(0, 410, 1020, 400)];
UIImage *image = [UIImage imageNamed:@"img.jpeg"];
view1.image = image;
[self.view addSubview:view1];
UIImageView *view2 = [[UIImageView alloc] init ];
view2.frame = CGRectMake(0, 410, 0, 400);
view2.image = [UIImage imageNamed:@"bien.jpeg"];
[self.view addSubview:view2];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.8];
[UIView setAnimationDelay:2];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(removeView: view1:)];
view2.frame =  CGRectMake(0, 410, 800, 400);
[UIView commitAnimations];

関数 removeView を使用して、以下のスーパービューから view1 を削除します。

-(void)removeView: (UIImageView *)view1{
[view1 removeFromSuperview];
 }

スーパービューからview1を削除する機能が機能しない理由がわかりません。助けてください! どうもありがとう...

4

4 に答える 4

2

セレクターはパラメーターを渡すことができません。メソッドを次のように変更します

-(void)removeView{
   [view1 removeFromSuperview];
 }

ここで、「view1」はビューのインスタンスです。

そしてあなたのセレクターへ:

[UIView setAnimationDidStopSelector:@selector(removeView)];
于 2012-07-18T10:36:37.027 に答える
1

ブロックベースのアニメーションを使用することをお勧めします (iOS 4 以降で利用可能)。それらははるかに使いやすく、メソッドなどを介してパラメーターを送信する必要はありません。例:

UIImageView *view1 = [[UIImageView alloc] init];
//initialize your UIImageView view1
[self.view addSubview:view1];
UIImageView *view2 = [[UIImageView alloc] init];
//initialize your UIImageView view2
[UIView animateWithDuration:2 animations:^{
    //here happens the animation
    [self addSubview:view2];
} completion:^(BOOL finished) {
    //here happens stuff when animation is complete
    [view1 removeFromSuperView];
}];

投票するか、承認済みの回答としてマークすることを忘れないでください;)

于 2012-07-18T10:44:12.990 に答える
0

問題は単純です。このセレクターはクラスに存在しません-removeView:view1:: . したがって、アニメーションが終了した後にコールバックするものは何もありません。-(void)removeView:(UIImageView *)view1;これが、メソッドがコールバックされない理由です。

あなたの本当のセレクター-removeView:-removeView:view1:

を介してパラメーターを渡したい場合didStopSelectorは、悪いニュースがあります。コードで行ったようにそれを行うことはできないため、この部分はまったく間違っています:

// WRONG AT ALL:    
[UIView setAnimationDidStopSelector:@selector(removeView:view1:)];

// PROPER WAY:
[UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];

didStopSelectorは、次のパラメーターを持つ次の種類のセレクターでなければならないためです。

- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context;

次のように、コールバック メソッドのパラメーターを渡すことができます。

[UIView beginAnimations:nil context:view1]; // see the context's value

そして、あなたdidStopSelectorはそれを次のように使用できます:

- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
    [((UIView *)context) removeFromSuperView];
}
于 2012-07-18T11:58:28.157 に答える
0

このコードを試してください!!

UIImageView *view1 = [[UIImageView alloc] initWithFrame:CGRectMake(0, 410, 1020, 400)];
UIImage *image = [UIImage imageNamed:@"img.jpeg"];
view1.tag = 1;
view1.image = image;
[self.view addSubview:view1];

UIImageView *view2 = [[UIImageView alloc] init ];
view2.frame = CGRectMake(0, 410, 0, 400);
view2.image = [UIImage imageNamed:@"bien.jpeg"];
[self.view addSubview:view2];

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.8];
[UIView setAnimationDelay:2];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(removeView: view1:)];
view2.frame =  CGRectMake(0, 410, 800, 400);
[UIView commitAnimations];

// ビュー メソッドを削除

-(void)removeView : (UIImageView *) imgVew {

    if (imgVew.tag == 1)

        [imgVew removeFromSuperView];
}

アクセス -

[UIView setAnimationDidStopSelector:@selector(removeView:)];
于 2012-07-18T10:46:14.680 に答える