繁体   English   中英

从左向右移动图像

[英]Move image from left to right

在视图加载后的应用程序中,图像应从左到右显示。 我在viewdidloadviewwillappear编写此代码:

       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];

但问题是,在加载视图之前,它执行上面的代码而不是加载视图,因此看起来加载视图和静态图像。 但我的要求是第一个视图加载完全然后图像应该从左到右显示。

请帮帮我。

首先,你不应该在for循环中调用 - (void)addSubview: 你只需要调用一次。 其次,如果要从左到右为imageView设置动画, UIView类为此使用块提供了很好的功能。

您的代码应如下所示:

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:方法将为您处理动画计时器,只需根据您的需要设置持续时间参数。

您可以使用函数并使用计时器方法调用它。

timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(moveImage) userInfo:nil repeats:NO];

-(void)moveImage
{
//Your condition
}

在循环之前,不应该多次执行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];

这是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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM