Как отобразить определенный элемент в UIScrollView подкачки, а не просто загрузить его из 0 - PullRequest
0 голосов
/ 20 января 2019

Я хочу воссоздать ту же концепцию, что и приложение для встроенной галереи iOS, на базовом уровне, что означает наличие массива изображений и возможность просматривать их по отдельности и проводить пальцем вправо или влево, чтобы увидеть другие вмассив.Для целей тестирования я установил небольшой массив UIImages, а затем добавил отдельное подпредставление для каждого изображения в массиве в scrollView с включенной подкачкой страниц.Все работает как положено, однако каждый раз, когда я загружаю приложение, пользователь начинает с первого элемента (элемент № 0 в массиве), и я не нахожу способ вручную выбрать первое изображение, которое необходимо показать, напримерЧто делать, если я хочу, чтобы scrollView сначала показывал третье изображение в массиве, а затем мог пролистывать влево или вправо для перехода к странице с другими изображениями в массиве?Я не могу найти решение.

Я пытался добавить другие подпредставления, но это не работает, приложение работает, как ожидалось, но всегда запускается с первого элемента в массиве, я хочувыберите элемент вручную, поэтому, если я хочу отобразить третье изображение в массиве, 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 и показывает изображение, которое выбрал пользователь, а не первое изображение в массиве, а затем может провести вправо или влево.Я пытаюсь воссоздать, как это было бы только с помощью логики контроллера последнего представления.

1 Ответ

0 голосов
/ 20 января 2019

Таким образом, вы получите индекс при создании этого 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)

Таким образом, когда пользователь нажимает на изображение, вы получите индексный номер этого изображения в вашем ВК, а затем setContentOffset scrollView на ширину экрана, выбранную в виде индекса, это должно дать вам желаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...