IOS Scrollview Marquee风格

时间:2013-06-21 07:05:39

标签: iphone

我想要在UIScrollView中显示一组4张图片。此滚动视图包含广告横幅。所以他们必须自动垂直向下滚动,类似于选框效果 - 用户不需要触摸屏幕滚动。这个过程应该不断重复。

如果用户触摸屏幕,滚动应该停止&当用户重新触摸屏幕时,滚动应该从它离开的地方重新开始。

3 个答案:

答案 0 :(得分:1)

我想有更简单的方法。 UIImageView可以帮到你。 请按照以下步骤操作:

1)垂直向下添加4 UIImageView

2)为这些ImageView创建4个不同的数组。

NSArray *frames1 = [NSArray arrayWithObjects:[UIImage imageWithName:@"a.png"],[UIImage imageWithName:@"b.png"],[UIImage imageWithName:@"c.png"],[UIImage imageWithName:@"d.png"],nil];
NSArray *frames2 = [NSArray arrayWithObjects:[UIImage imageWithName:@"b.png"],[UIImage imageWithName:@"c.png"],[UIImage imageWithName:@"d.png"],[UIImage imageWithName:@"a.png"],nil];
NSArray *frames3 = [NSArray arrayWithObjects:[UIImage imageWithName:@"c.png"],[UIImage imageWithName:@"d.png"],[UIImage imageWithName:@"a.png"],[UIImage imageWithName:@"b.png"],nil];
NSArray *frames4 = [NSArray arrayWithObjects:[UIImage imageWithName:@"d.png"],[UIImage imageWithName:@"a.png"],[UIImage imageWithName:@"b.png"],[UIImage imageWithName:@"c.png"],nil];

3)将这些数组提供给所有这些不同的ImageView。

yourImageView1.animationImages = frames1;
yourImageView2.animationImages = frames2;
yourImageView3.animationImages = frames3;
yourImageView4.animationImages = frames4;

4)您也可以添加一些效果......

// all frames will execute in 1.75 seconds
yourImageView.animationDuration = 1.75;
// repeat the annimation forever
yourImageView.animationRepeatCount = 0;

5)只需startAnimating ImageViews。

[yourImageView1 startAnimating]; 
[yourImageView2 startAnimating]; 
[yourImageView3 startAnimating]; 
[yourImageView4 startAnimating]; 

6)您始终可以使用-touchesEnded方法来启动和停止动画。

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    if ([[touches anyObject] view] == yourImageView1) {
        //Here you can write the code to stop and start Animation of UIImageView
    }
}

我认为这会给你效果。

GoodLuck !!!

答案 1 :(得分:1)

这就是我最终做到的:-)。
从viewDidLoad

调用以下方法
[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(scrollTheScrollView) userInfo:nil repeats:YES];

现在实施方法

-(void)scrollTheScrollView{

static int i=0;

i++;

if(self.scrollView.contentOffset.y == 700.0)//This 700.0 will be different for you
    i=0;

NSLog(@"Content offset in scrolling method is %@",self.scrollView);

[self.scrollView setContentOffset:CGPointMake(0, i*5)];}

答案 2 :(得分:0)

如果您有兴趣,我为此制作了一个API。

https://github.com/dokun1/DOMarqueeLabel