使用UIScrollView和AutoLayout进行幻灯片放映

时间:2014-03-25 14:51:38

标签: iphone ios7 uiscrollview slideshow autolayout

我想使用UIScrollView创建一个简单的图像幻灯片,我注意到,使用新的AutoLayout模式,与iOS5相比,操作变得更加复杂。我无法找到任何SIMPLE和SHORT示例/教程来完成它。关于"纯粹"有很多材料。和#34; hybrid"接近,但老实说,没有什么对我有用。也许材料不够清晰,也许我还不够......他们知道。无论如何,我认为分享我的发现以及当前正在为我工​​作的代码片段可能是有用的。我们走了:

- (void)setupSlideshow {

    NSInteger nPhotos = [self.profilePhotos count];
    UIScrollView *scrollView;
    UIImageView *imageView;
    NSDictionary *viewsDictionary;
    // Create the scroll view and the image view.
    scrollView  = self.slideShow;
    CGFloat sWidth = scrollView.frame.size.width;
    CGFloat sHeight = scrollView.frame.size.height;
    UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, nPhotos * sWidth, sHeight)];
    scrollView.pagingEnabled = YES;
    CGFloat cx = 0;
    for (int i = 0; i < nPhotos; i++) {
        imageView = [[UIImageView alloc] init];
        // Add an image to the image view.
        [imageView setImage:[UIImage imageNamed:self.profilePhotos[i]]];
        CGRect imFrame = imageView.frame;
        imFrame.origin.x = cx;
        imFrame.origin.y = 0;
        imFrame.size.width = sWidth;
        imFrame.size.height = sHeight;
        imageView.frame = imFrame;
        [container addSubview:imageView];
        cx += sWidth;
    }
    container.translatesAutoresizingMaskIntoConstraints = NO;
    scrollView.translatesAutoresizingMaskIntoConstraints  = NO;
    [scrollView addSubview:container];
    // Set the constraints for the scroll view and the image view.
    viewsDictionary = NSDictionaryOfVariableBindings(scrollView, container);
    [scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"H:|-0-[container(%f)]-0-|",cx]
                                                                       options:0
                                                                       metrics: 0
                                                                         views:viewsDictionary]];
    [scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[container]-0-|" options:0 metrics: 0 views:viewsDictionary]];
}

scrollView已在StoryBoard中实例化。 您可以注意到,我采用了一种基于UIView容器的方法来处理我想要使用的图片,该图片已被添加到scrollview中。然后我使用Visual Constraints Format表示法添加了一些约束。我试图将容器的宽度与滚动条的宽度相匹配:

[NSString stringWithFormat:@"H:|-0-[container(==scrollView)]-0-|"]

但它不起作用(确切地说它不会滚动但是会粘到第一个图像上),因此我选择使用简单的字符串格式进行动态处理。

正如我所说,它完成了这项工作,但我确信我可以让它变得更优雅。除此之外,是否可以相对于动态宽度来解决问题?

我希望收到一些有用的反馈,以便完善这个例子。然后,我将设置一个GitHub,让所有那些花了3天时间撞墙的人都可以公开使用......就像我一样。

0 个答案:

没有答案