我想使用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天时间撞墙的人都可以公开使用......就像我一样。