#ios #swift #uiscrollview
#iOS #swift #uiscrollview
Вопрос:
я пытаюсь создать что-то вроде галереи фотографий.
Но теперь у меня проблема с масштабированием в UIScrollView.
for i in 0..<imageArray.count{
let imageView = UIImageView()
imageView.isUserInteractionEnabled = true
imageView.image = imageArray[i]
imageView.contentMode = .scaleAspectFit
let xPosition = self.view.frame.width * CGFloat(i)
imageView.frame = CGRect(x: 0, y: 0, width: self.scrollView.frame.width, height: self.scrollView.frame.height)
scrollView.addSubview(imageView)
scrollView.contentSize.width = scrollView.frame.width * CGFloat(i 1)
}
scrollView.isScrollEnabled = true
scrollView.minimumZoomScale = 1.0
scrollView.maximumZoomScale = 6.0
scrollView.isUserInteractionEnabled = true
scrollView.delegate = self
Подкачка работает нормально, но теперь я не знаю, как включить масштабирование каждого ImageView.
Ответ №1:
Вам нужно будет реализовать следующий метод из UIScrollViewDelegate
протокола:
func viewForZooming(in: UIScrollView) -> UIView?
При этом вы возвращаете вид, который хотите увеличить.
Теперь в этом случае у вас есть несколько видов изображений (в зависимости от imageArray.count), но я предполагаю, что вы хотите прокрутить их все (т. Е. Не отдельное изображение), поэтому лучше всего было бы добавить «просмотр содержимого» (UIView) к виду прокрутки, а затем добавить к нему отдельные виды изображений вместо прямого просмотра прокрутки и соответствующим образом его увеличить.
Затем вы можете вернуть этот «просмотр содержимого» в viewForZooming
методе.
Итак, предполагая, что вы создали это «представление содержимого», тогда метод будет выглядеть следующим образом:
func viewForZooming(in: UIScrollView) -> UIView? {
return self.contentView
}
Комментарии:
1. Что значит «импортировать» это? Вы назначили self делегатом scroll views, поэтому он уже должен соответствовать
UIScrollViewDelegate
протоколу.viewForZooming
Метод является одним из необязательных методов, поэтому вам просто нужно создать соответствующий ему метод.2. В нем говорилось: метод экземпляра ‘viewForZooming (in:)’ почти соответствует необязательному требованию ‘viewForZooming (in:)’ протокола ‘UIScrollViewDelegate’
3. Если это почти совпадает, значит, вы не совсем написали это, напишите формат метода ‘viewForZooming(в: UIScrollView) -> UIView?’, поэтому он должен точно соответствовать этому. Возможно, даже есть возможность исправить это, если вы нажмете на ошибку, которую я не могу вспомнить.
4. Сложно сказать, не видя всего кода, но в этом руководстве показано, как это работает: Руководство по просмотру прокрутки
5. Проблема в том… Я не могу реализовать этот метод… Или я не знаю, как? потому что, когда я импортировал протокол UIScrollViewDelegate, у меня там не было этого метода…