gpt4 book ai didi

ios - 使用 UIScrollView 循环浏览图像

转载 作者:搜寻专家 更新时间:2023-11-01 06:45:45 25 4
gpt4 key购买 nike

Storyboard view of controller

我在 scrollView 中有一个 imageView,我希望能够上传最多 3 张图片并让用户在它们之间滑动。我只是通过用我想要的信息替换 View 的内容来完成此操作,但它看起来或感觉不如带分页的 ScrollView 好。

我拥有使每个图像在我需要时显示的所有代码,但我的问题在于 ScrollView 约束以及如何向具有固定宽度的 ScrollView 添加更多内容。无论我做什么,当我将图像添加到 View 时,我似乎都无法扩展滚动范围。

这是我现在正在尝试的:

let newImageView:UIImageView = UIImageView()
self.imageScrollView.contentSize = CGSize(width: self.imageView.frame.size.width * 3, height: self.imageView.frame.size.height)
self.imageScrollView.pagingEnabled = true

for i = 0; i < 3; ++i {
var xOrigin:CGFloat = CGFloat(i) * self.view.frame.size.width
newImageView.frame = CGRectMake(self.imageView.image!.size.width * i, 0, self.imageView.image!.size.width, self.imageScrollView.frame.size.height)
newImageView.image = images[i]
newImageView.contentMode = UIViewContentMode.ScaleAspectFit
self.imageScrollView.addSubview(newImageView)
}

使用此代码,我可以添加图像,但无法滚动到它们。在我的 Storyboard中, ScrollView 约束如下所示:

enter image description here

我确信其中一些约束是多余的,但我无法弄清楚为什么内容宽度不会扩展并允许我滚动浏览 ScrollView 中的所有图像。

编辑

我已经使用@matt 的教科书示例进行了更改。我制作了一个新的 View Controller 并将它放在我的另一个 View Controller (与我原来的 View Controller 相同)的 View 中。它显示第一个没问题,但当我向左或向右滑动时,它似乎没有调用 UIPageViewControllerDataSource 函数。我不确定为什么会这样。

这是它在原始 View Controller (UploadPhotoViewController) 中的样子

func setUpPageViewController() {
sharedIm.images.append(UIImage(named: "placeholder")!)
sharedIm.images.append(UIImage(named: "TestProfile")!)
sharedIm.images.append(UIImage(named: "button")!)
let pvc = UIPageViewController(transitionStyle: .Scroll, navigationOrientation: .Horizontal, options: nil)
let page:ImagePage = ImagePage()
pvc.dataSource = self
pvc.setViewControllers([page], direction: .Forward, animated: false, completion: nil)

pvc.view.frame = self.imageContainer.bounds
self.imageContainer.addSubview(pvc.view)
pvc.didMoveToParentViewController(self)
}

//this is placed at the end of the class
extension UploadPhotoViewController : UIPageViewControllerDataSource {
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
let image = (viewController as! ImagePage).image
let ix = find(sharedIm.images, image)! + 1
println(ix)
if ix >= sharedIm.images.count {
println("no next page")
return nil
}
sharedIm.currentIndex = ix
let page = ImagePage()
return page
}


func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
let image = (viewController as! ImagePage).image
let ix = find(sharedIm.images, image)! - 1
println(ix)
if ix < 0 {
println("no previous page")
return nil
}
sharedIm.currentIndex = ix
let page = ImagePage()
return page
}

这是我的新 View Controller 中的内容,它被添加到另一个 View Controller 中:

class ImagePage: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

var image : UIImage?
var imagePicker: UIImagePickerController!
@IBOutlet var imageView : UIImageView!
@IBOutlet var forwardButton: UIButton!
@IBOutlet var backButton: UIButton!
@IBOutlet var closeButton: UIButton!
@IBOutlet var pictureButton: UIButton!
@IBOutlet var cameraButton: UIButton!



init() {
self.image = sharedIm.images[sharedIm.currentIndex]
super.init(nibName: "ImagePage", bundle: nil)
}

required init(coder: NSCoder) {
fatalError("NSCoding not supported")
}

override func viewDidLoad() {
super.viewDidLoad()
self.imageView.image = self.image
}
//bunch of other code for buttons and uploading pictures
}

最佳答案

使用 UIPageViewController(具有滚动样式),您尝试做的事情会容易得多。我建议您改用 UIPageViewController 实现。

原因是您一次只能提供一个“页面”(在您的例子中是一张图片)。您可以实时决定在任一方向是否有另一个“页面”,以及您想假装那里“真的”有多少个“页面”。簿记工作发生在您的模型(幕后数据)中,而不是像 UIScrollView 要求您那样配置整个 View 来同时处理所有页面。

关于ios - 使用 UIScrollView 循环浏览图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31118016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com