1

我正在制作一个应用程序,当用户单击图像时,它会显示出来,然后是下一个代码。如您所见,它会使图像消失,然后我想将其从超级视图中删除。

这是代码:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.8f];
[UIView setAnimationDelay:1.0f];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
tempImageView1.alpha = 0;
tempImageView2.alpha = 0;
[UIView commitAnimations];

[tempImageView1 removeFromSuperview];
[tempImageView2 removeFromSuperview];
//[self performSelector:@selector(removeFromSuperview) withObject:tempImageView1 afterDelay:1.8f];
//[self performSelector:@selector(removeFromSuperview) withObject:tempImageView2 afterDelay:1.8f];

令我困惑的是,如果我写 [tempImageView1 removeFromSuperview]; 该应用程序可以正常工作,但当然图像甚至在显示之前就关闭了。当我尝试编写上面注释的行之一时,做同样的事情但有延迟,我收到一条错误消息。

原因是:“[GamePage2 removeFromSuperview]: unrecognized selector sent to instance”

4

4 回答 4

0

因为您在 self 上调用选择器,而不是 tempImageView1。

你试过了[tempImageView1 performSelector ...] 吗?

于 2012-12-13T06:48:06.780 回答
0

只是为了它首先用上面的代码创建一个方法,然后用延迟时间调用这个方法

[self performSelector:@selector(removeImage) withObject:nil afterDelay:2.0];

-(void)removeImage{

     [tempImageView1 removeFromSuperview];
     [tempImageView2 removeFromSuperview];
     CATransition *animation = [CATransition animation];
 [animation setDelegate:self];  
 [animation setType:kCATransitionFade];
 [animation setDuration:0.5];
 [animation setTimingFunction:[CAMediaTimingFunction functionWithName:
                              kCAMediaTimingFunctionEaseInEaseOut]];
  [[tempImageView1 layer] addAnimation:animation forKey:@"transitionViewAnimation"];
 [[tempImageView2 layer] addAnimation:animation forKey:@"transitionViewAnimation"];
}
于 2012-12-13T06:48:26.847 回答
0

在你的代码中做

tempImageView1.alpha = 1;
tempImageView2.alpha = 1;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.8f];
[UIView setAnimationDelay:1.0f];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
tempImageView1.alpha = 0;
tempImageView2.alpha = 0;
[tempImageView1 removeFromSuperview];
[tempImageView2 removeFromSuperview];
[UIView commitAnimations];
于 2012-12-13T06:50:42.997 回答
0

对于中间的任何动画循环,您的代码的执行都不会停止,因此,当您调用“removeFromSuperView”时,即使在动画完成之前也会执行该方法。这会导致您的图像在没有任何动画的情况下被删除。您可以在延迟方法之后使用执行选择器,但您必须在相应的对象上调用它,在这种情况下是 GamePage2。用 GamePage2 替换 self ,它应该可以正常工作。更好的方法是使用动画完成处理程序,可以像下面这样完成

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:.1.8];
    [UIView setAnimationDelegate: self];
    [UIView setAnimationDidStopSelector:@selector(animationFinished:context:)];

    //your animation code... 
    [UIView commitAnimations];

这将在动画完成后调用给定的选择器,您可以在那里编写从 superview 中删除的方法。

于 2012-12-13T06:51:12.933 回答