我想简单地设置一个循环,以便对象在底部的屏幕上连续移动。这是我的代码,应该很容易理解。
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[self performSelector:@selector(spawnRocket) withObject:self afterDelay:2]; //delay before the object moves
}
-(void)spawnRocket{
UIImageView *rocket=[[UIImageView alloc]initWithFrame:CGRectMake(-25, 528, 25, 40)]; //places imageview right off screen to the bottom left
rocket.backgroundColor=[UIColor grayColor];
[UIView animateWithDuration:5 animations:^(){rocket.frame=CGRectMake(345, 528, 25, 40);} completion:^(BOOL finished){if (finished)[self spawnRocket];}]; //this should hopefully make it so the object loops when it gets at the end of the screen
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
完成所有这些后,我点击运行,我看到的是我的iphone 6.0模拟器上的白色屏幕
PS。我正在运行xcode 4.5.1
答案 0 :(得分:1)
一些事情:
UIImageView *rocket=[[UIImageView alloc]initWithFrame:...
您没有为图像视图指定图像,最好的方法是使用:
UIImage* image = [UIImage imageNamed:@"image.png"];
UIImageView *rocket = [[UIImageView alloc] initWithImage:image];
rocket.frame = CGRectMake(-25, 528, 25, 40);
(问题的根本原因)您没有将UIImageView
添加到主视图中,因此未显示。在spawnRocket
中,你应该这样做:
[self.view addSubview:rocket];
注意:因为您希望在循环中完成此操作,所以您必须确保内存管理正常。
我不知道你完成移动后是否仍然希望火箭在屏幕上显示,但如果没有,请记住在完成后保留对UIImageView
和removeFromSuperview
的引用(至防止内存泄漏)。
在spawnRocket
中调用viewDidLoad
可能不是最好的主意,但在调用spawnRocket
时可能无法到达屏幕。尝试在viewWillAppear
或viewDidAppear
中调用它(在您的情况下最好)
[self performSelector:@selector(spawnRocket) withObject:self afterDelay:2];
您无需在self
内提供withObject:
,也不接受spawnRocket
答案 1 :(得分:0)
您不能将UIImageView
添加到任何父视图中。它只会存在于内存中,但不会显示出来。创建后将其添加到视图控制器的视图中:
[self.view addSubview:rocket];