iOS:如何在打开分页的情况下浏览图像



基本上,我希望有一个只有一个视图的应用程序,上面有一个图像。我希望能够向左或向右滑动,第一个图像离开视图,第二个图像进入视图。图像是相同的,我希望它看起来像是连接的(就像向下滚动一根绳子,其中的模式只是重复,但它看起来像一个恒定的滚动)。我需要它能够更改图像或在一系列滑动后重新启动。我知道我需要在UIScrollView中打开分页,但我是iOS新手,遇到了麻烦。

最终,我想让iPhone每刷一次就振动一次(并重新启动模式)。

我相信有很多方法可以做到这一点(即TableView),所以如果答案解释起来很乏味,请随意为我指明一些参考文献的方向。

谢谢!

随访:

我发现了一个苹果的例子,它几乎做到了我想做的。我对它做了很多调整,但我的头撞在墙上,试图让图像循环。以下是我认为有问题的代码,但我不确定解决方案是什么,因为ScrollView是功能性的,它只是没有将中心重置为当前视图。有什么想法吗?

    - (void)layoutScrollImages
{
        UIImageView *view = nil;
        NSArray *subviews = [scrollView1 subviews];
    // reposition all image subviews in a horizontal serial fashion
    CGFloat curXLoc = 0;
    for (view in subviews)
    {
        if ([view isKindOfClass:[UIImageView class]] && view.tag > 0)
        {
            CGRect frame = view.frame;
            frame.origin = CGPointMake(curXLoc, 0);
            view.frame = frame;
            curXLoc += (kScrollObjWidth);
        }
    }
    // set the content size so it can be scrollable
    [scrollView1 setContentSize:CGSizeMake((kNumImages * kScrollObjWidth), [scrollView1 bounds].size.height)];
}

我只想使用UIScrollView。将contentWidth设置为视图宽度/高度的3倍(对于3页),并将contentOffset设置为中心"页面"(view.bounds.size.widthview.bounds.size.height,具体取决于您是水平滚动还是垂直滚动)。您需要为UIScrollView(可能是视图控制器)设置一个委托并实现- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView。当滚动视图完成减速时,将调用此操作。减速完成后,将contentOffset重置回中心视图。这应该给人一种无限卷轴的印象。您也可以在scrollViewDidEndDecelerating方法中将计数器设置为递增,以递增计数器或启动振动。

您不需要不断地重新定位图像。只需在滚动中设置一次图像即可查看:

//Horizontal arrangement
UIImage *image = [UIImage imageNamed:@"nameOfImage.png"];
UIImageView *imageView1 = [[UIImageView alloc] initWithImage:image];
UIImageView *imageView2 = [[UIImageView alloc] initWithImage:image];
UIImageView *imageView3 = [[UIImageView alloc] initWithImage:image];
NSArray *imageViews = [NSArray arrayWithObjects:imageView1, imageView2, imageView3];
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
[self.view addSubview: scrollView]; //This code assumes it's in a UIViewController
CGRect cRect = scrollView.bounds;
UIImageView *cView;
for (int i = 0; i < imageViews.count; i++){
    cView = [imageViews objectAtIndex:i];
    cView.frame = cRect;
    [scrollView addSubview:cView];
    cRect.origin.x += cRect.size.width;
}
scrollView.contentSize = CGSizeMake(cRect.origin.x, scrollView.bounds.size.height);
scrollView.contentOffset = CGPointMake(scrollView.bounds.size.width, 0); //should be the center page in a 3 page setup

所以图像已经设置好了,你再也不需要摆弄它们了。只需在滚动视图停止时重置contentOffset(注意:您需要确保自己是滚动视图的代表,否则滚动视图停止后不会收到消息):

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    scrollView.contentOffset = CGPointMake(scrollView.bounds.size.width, 0);
}

请原谅任何拼写错误。我手写的。

在cocoacontrols.com上查看自定义相册视图。至于振动,这个代码片段会振动手机(确保你链接到和#import <AudioToolbox/AudioToolbox.h>):

 AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

最新更新