这是我想在这里完成的事情。我希望图像从屏幕顶部开始并转到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语句不起作用,我不知道如何使这个工作。我很擅长使用积分。
或者可能是一个循环?有任何想法吗? 非常感谢!
度过美好的一天
答案 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];
}];