如何在分页 UIScrollView 中显示确定的项目而不是仅从 0 加载它

How to display a determined item in a paging UIScrollView instead of just loading it from 0

我想重新创建 iOS 内置图库应用程序在基本级别中所做的相同概念,这意味着拥有一组图像并能够单独查看它们并向右或向左滑动查看数组中的其他项。出于测试目的,我设置了一个小的 UIImage 数组,然后为数组中的每个图像添加一个单独的子视图到启用分页的 scrollView。一切都按预期工作,但是每次我加载应用程序时,用户都会从第一项(数组中的第 0 项)开始,我找不到手动 select 需要的第一张图像的方法显示,例如,如果我希望 scrollView 首先显示数组中的第三张图像,然后能够向左或向右滑动以翻页到数组中的其他图像怎么办?我找不到解决办法。

我尝试添加其他子视图,但这不起作用,该应用程序按预期工作,但始终从数组中的第一项开始,我想手动 select 该项目,所以如果我想要显示数组中的第三个图像,collectionView 就是这样做的。我有六张图片用于测试目的(每张都称为 menu_icon_(0...5))

@IBOutlet weak var scrollView: UIScrollView! {
    didSet {
        scrollView.delegate = self
    }
}

var images:[ImagePreviewView] = [ImagePreviewView]()
override func viewDidLoad() {
    super.viewDidLoad()
    images = generateImages()
    setupSlideScrollView(imagesPreviews: images)
}

func generateImages() -> [ImagePreviewView]{
    var array:[ImagePreviewView] = []

    for i in 0...5 {
        let imagePreview = Bundle.main.loadNibNamed("ImagePreview", owner: self, options: nil)?.first as! ImagePreviewView
        imagePreview.userSelectedImageView.image = UIImage(named: "menu_icon_\(i)")
        array.append(imagePreview)
    }
    return array
}

func setupSlideScrollView(imagesPreviews : [ImagePreviewView]) {
    scrollView.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height)
    scrollView.contentSize = CGSize(width: view.frame.width * CGFloat(imagesPreviews.count), height: view.frame.height)
    scrollView.isPagingEnabled = true

    for i in 0 ..< imagesPreviews.count {
        imagesPreviews[i].frame = CGRect(x: view.frame.width * CGFloat(i), y: 0, width: view.frame.width, height: view.frame.height)
        scrollView.addSubview(imagesPreviews[i])
    }
}

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let pageIndex = round(scrollView.contentOffset.x/view.frame.width)
    print("Page Index is \(pageIndex)")
}

我想以用户将图像添加到集合视图的方式实现此代码,并且当用户点击图像时,indexPath.item 被发送到此 viewController 并且显示用户 select 编辑的图像,而不是数组中的第一张图像,然后可以向右或向左滑动。我试图通过后一个视图控制器逻辑重新创建它的样子。

因此您将在创建此 VC 时收到索引。让我们称之为 selectedIndex

var selectedIndex = 0 //I give 0 as initial value but it will be updated anyways.

然后在 viewDidAppear 中尝试以下操作:

let width = view.frame.width
scrollView.setContentOffset(CGPoint(x: width * selectedIndex, y: 0), animated: false)

因此,当用户点击图片时,您将在 VC 中收到该图片的索引号,然后 setContentOffset scrollView 到屏幕宽度乘以 selectedIndex,这应该给您你想要的结果。