目标C - 如果CGRectmake声明?

时间:2011-07-08 00:25:11

标签: objective-c ios cgpoint cgrect

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

- (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语句不起作用,我不知道如何使这个工作。我很擅长使用积分。

或者可能是一个循环?有任何想法吗? 非常感谢!

度过美好的一天

2 个答案:

答案 0 :(得分:2)

这条线有点混乱:

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

-[NSView setFrame]功能设置视图的框架。它不能用于检查当前帧是什么 - 为此,你可以使用类似的东西:

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

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

答案 1 :(得分: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];
                 }];