在视图加载后的应用程序中,图像应从左到右显示。
我在viewdidload
或viewwillappear
:
UIImage *image = [UIImage imageNamed:@"PG05(REV).jpg"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
for (int i=-1024; i<=0; i++) {
NSLog(@"i: %d",i);
sleep(5);
imageView.frame = CGRectMake(i,0, 1024, 768);
NSLog(@"done");
[self.view addSubview:imageView];
}
[imageView release];
但问题是,在加载视图之前,它会执行上面的代码,而不是加载视图,因此看起来加载了视图并且静态图像就在那里。 但我的要求是第一个视图加载完全然后图像应该从左到右显示。
请帮帮我。
答案 0 :(得分:2)
首先,你不应该在for循环中调用 - (void)addSubview:你只需要调用一次。 其次,如果您想要从左到右为imageView设置动画,UIView class为使用块提供了很好的功能。
您的代码应如下所示:
UIImage *image = [UIImage imageNamed:@"PG05(REV).jpg"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
imageView.frame = CGRectMake(-1024, 0, 1024, 768);
[self.view addSubview:imageView];
[imageView release]; //Your imageView is now retained by self.view
//Animation
[UIView animateWithDuration:2.0
animations:^(void) {
imageView.frame = CGRectMake(0, 0, 1024, 768);
}];
animateWithDuration:方法将为您处理动画计时器,只需根据您的需要设置持续时间参数。
答案 1 :(得分:0)
您可以使用函数并使用计时器方法调用它。
timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(moveImage) userInfo:nil repeats:NO];
-(void)moveImage
{
//Your condition
}
答案 2 :(得分:0)
在循环之前,不应该多次执行addSubView:此外,您应该使用动画而不是睡眠循环。
示例:
imageView.frame = CGRectMake(-1024,0, 1024, 768);
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration: 5];
imageView.frame = CGRectMake(0,0, 1024, 768);
[UIView commitAnimations];
答案 3 :(得分:0)
这是UIView动画的工作。
将你的imageView放在-1024左下,然后转到:
[imageView animateWithDuration:5 animations:^{
[imageView.frame = CGRectMake(0,0, 1024, 768)];
}];
钽哒!将图像滑动到右侧的五秒钟动画。
查看UIView的动画方法(其中UIImageView是子类): http://developer.apple.com/library/ios/#documentation/uikit/reference/UIView_Class/UIView/UIView.html