0

这就是我试图在这里完成的事情。我希望图像从屏幕顶部开始并转到底部,然后当它到达底部时它会再次返回。我可以通过这样做让图像下降

- (void)viewDidLoad {
[super viewDidLoad];


[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:4.0];
[image setFrame:CGRectMake(0, 0, 30, 1500)];
[UIView commitAnimations];


if ([image setFrame:CGPoint =(0, 0, 30, 1500)]) {
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:4.0];
    [image setFrame:CGRectMake(0, 0, 30, 0)];
    [UIView commitAnimations];
}
}

这个 if 语句不起作用,我不知道如何使它起作用。我对使用积分很陌生。

或者也许是一个while循环?有任何想法吗?非常感谢!

祝你有美好的一天

4

2 回答 2

2

这条线有点混乱:

if ([image setFrame:CGPoint =(0, 0, 30, 1500)]) {

-[NSView setFrame]函数设置视图的框架。它不能用于检查当前帧是什么 - 为此,您可以使用以下内容:

if (CGRectEqualToRect([image frame], CGRectMake(0, 0, 30, 1500))) {

它使用该-[NSView frame]函数获取当前帧并CGRectEqualToRect进行比较。

于 2011-07-08T00:31:23.527 回答
0

此代码将不会运行,因为此行无效

if ([image setFrame:CGPoint =(0, 0, 30, 1500)]) {

我相信你的意思是比较视图的位置

if (CGPointEqualToPoint(image.frame.origin, CGPointMake(0, 0))) {

您的图像宽度也设置1500在看起来不太正确的地方

这不起作用的最后一个原因是因为 UIView 将查看位置的净变化并意识到视图不会移动,因此它不会做任何事情。

您需要做的可能是使用这样的块

float duration = 0.5;
int delay = 0;

[UIView animateWithDuration:duration
                      delay:delay
                    options:UIViewAnimationCurveLinear
                 animations: ^{
                     image.frame = CGRectMake(0, 460, 30, 30);
                 } completion:^(BOOL finished) {

                     [UIView animateWithDuration:duration
                                           delay:delay
                                         options:UIViewAnimationCurveLinear
                                      animations: ^{
                                          image.frame = CGRectMake(0, 0, 30, 30);
                                      } completion:nil];
                 }];
于 2011-07-08T00:38:08.867 回答