Как включить эффект масштабирования в UIScrollView?
Как включить масштабирование в UIScrollView
Ответ 1
Посмотрите это видео
Описание из видео:
- Добавить
UIScrollViewDelegate
делегат - Возьмите
UIScrollView
- Возьмите UIImageView, который будет добавлен в Scrollview
- Поместите вид прокрутки в Главное окно
- Подключить делегатов
- Настройка imageView
- Установить масштаб/масштаб масштабирования [основная вещь здесь]
- Внедрить метод делегата для возврата представления
Ответ 2
Ответ здесь:
Представление прокрутки также обрабатывает масштабирование и панорамирование содержимого. Когда пользователь делает жест ввода или вывода, представление прокрутки регулирует смещение и масштаб содержимого. Когда жест заканчивается, объект, управляющий представлением контента, должен обновлять подпредставления контента по мере необходимости. (Обратите внимание, что жест может закончиться, а палец все еще может быть опущен.) Во время выполнения жеста представление прокрутки не отправляет никаких вызовов отслеживания в подпредставление.
Класс UIScrollView может иметь делегата, который должен принимать протокол UIScrollViewDelegate. Чтобы масштабирование и панорамирование работали, делегат должен реализовать и viewForZoomingInScrollView: и scrollViewDidEndZooming: withView: atScale :; Кроме того, максимальный (максимум ZoomScale) и минимальный (минимум ZoomScale) масштаб должен быть разным.
Так:
- Вам нужен делегат, который реализует
UIScrollViewDelegate
и настроен наdelegate
в вашем экземпляреUIScrollView
- В вашем
viewForZoomingInScrollView:
вы должны реализовать один метод:viewForZoomingInScrollView:
(который должен возвращать представление контента, которое вас интересует масштабирование). Вы также можете реализоватьscrollViewDidEndZooming:withView:atScale:
опционально. - В вашем экземпляре
UIScrollView
вы должны установитьminimumZoomScale
иmaximumZoomScale
(по умолчанию они равны 1,0).
Примечание: Самое интересное это то, что если вы хотите, чтобы сломать масштабирование. Достаточно ли вернуть nil
в viewForZooming...
? Это нарушает масштабирование, но некоторые жесты будут испорчены (для двух пальцев). Поэтому, чтобы остановить масштабирование, вы должны установить минимальное и максимальное масштабирование на 1,0.
Ответ 3
Прочитайте этот учебник Ray Wenderlich:
http://www.raywenderlich.com/76436/use-uiscrollview-scroll-zoom-content-swift
Если вы перейдете в раздел "Прокрутка и масштабирование изображения большего размера", он получит изображение вверх и позволит вам зажать и увеличить масштаб.
В случае изменения ссылки, здесь основная информация: Поместите этот код в свой контроллер просмотра (это устанавливает основную функциональность):
override func viewDidLoad() {
super.viewDidLoad()
// 1
let image = UIImage(named: "photo1.png")!
imageView = UIImageView(image: image)
imageView.frame = CGRect(origin: CGPoint(x: 0, y: 0), size:image.size)
scrollView.addSubview(imageView)
// 2
scrollView.contentSize = image.size
// 3
var doubleTapRecognizer = UITapGestureRecognizer(target: self, action: "scrollViewDoubleTapped:")
doubleTapRecognizer.numberOfTapsRequired = 2
doubleTapRecognizer.numberOfTouchesRequired = 1
scrollView.addGestureRecognizer(doubleTapRecognizer)
// 4
let scrollViewFrame = scrollView.frame
let scaleWidth = scrollViewFrame.size.width / scrollView.contentSize.width
let scaleHeight = scrollViewFrame.size.height / scrollView.contentSize.height
let minScale = min(scaleWidth, scaleHeight);
scrollView.minimumZoomScale = minScale;
// 5
scrollView.maximumZoomScale = 1.0
scrollView.zoomScale = minScale;
// 6
centerScrollViewContents()
}
Добавьте это в класс:
func centerScrollViewContents() {
let boundsSize = scrollView.bounds.size
var contentsFrame = imageView.frame
if contentsFrame.size.width < boundsSize.width {
contentsFrame.origin.x = (boundsSize.width - contentsFrame.size.width) / 2.0
} else {
contentsFrame.origin.x = 0.0
}
if contentsFrame.size.height < boundsSize.height {
contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height) / 2.0
} else {
contentsFrame.origin.y = 0.0
}
imageView.frame = contentsFrame
}
И тогда это, если вы хотите, чтобы признак двойного нажатия был распознан:
func scrollViewDoubleTapped(recognizer: UITapGestureRecognizer) {
// 1
let pointInView = recognizer.locationInView(imageView)
// 2
var newZoomScale = scrollView.zoomScale * 1.5
newZoomScale = min(newZoomScale, scrollView.maximumZoomScale)
// 3
let scrollViewSize = scrollView.bounds.size
let w = scrollViewSize.width / newZoomScale
let h = scrollViewSize.height / newZoomScale
let x = pointInView.x - (w / 2.0)
let y = pointInView.y - (h / 2.0)
let rectToZoomTo = CGRectMake(x, y, w, h);
// 4
scrollView.zoomToRect(rectToZoomTo, animated: true)
}
Если вы хотите более подробно прочитать учебник, но это в значительной степени покрывает его.
Ответ 4
Убедитесь, что вы установили свой viewController в качестве делегата scrollViews и реализуете:
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return imageView
}
Ответ 5
Я не думаю, что это работает для iOS 5.0 и Xcode 4.3+ Я искал то же самое здесь, я нашел это для изображений, но это может вам помочь.