Как включить масштабирование в UIScrollView

Как включить эффект масштабирования в UIScrollView?

Посмотрите это видео

Описание из видео:

  • Добавить делегат UIScrollViewDelegate
  • Возьмите UIScrollView
  • Возьмите UIImageView, который будет добавлен в Scrollview
  • Поместите вид прокрутки в главное окно
  • Подключить делегатов
  • Настройка образа
  • Установите масштаб масштабирования макс / мин [основная вещь здесь]
  • Внедрить метод делегата для возврата

Ответ здесь :

В представлении прокрутки также выполняется масштабирование и панорамирование содержимого. По мере того, как пользователь делает жест щелкания или вырезания, вид прокрутки регулирует смещение и масштаб содержимого. Когда этот жест заканчивается, объект, управляющий представлением контента, должен обновлять подсмотры содержимого по мере необходимости. (Обратите внимание, что жест может закончиться, и палец все равно может быть опущен.) Пока этот жест продолжается, представление прокрутки не отправляет никаких вызовов отслеживания в подвью.

Класс UIScrollView может иметь делегат, который должен принять протокол UIScrollViewDelegate. Для масштабирования и панорамирования для работы делегат должен реализовать как viewForZoomingInScrollView: так и scrollViewDidEndZooming: withView: atScale :; кроме того, максимальная (максимальная шкала ZoomScale) и минимальная шкала (minimumZoomScale) должны быть разными.

Так:

  1. Вам нужен делегат, который реализует UIScrollViewDelegate и настроен на delegate в вашем экземпляре UIScrollView
  2. На вашем viewForZoomingInScrollView: вы должны реализовать один метод: viewForZoomingInScrollView: ( который должен вернуть представление содержимого, которое вам интересно в масштабировании ). Вы также можете реализовать scrollViewDidEndZooming:withView:atScale: необязательно.
  3. В вашем экземпляре UIScrollView вы должны установить minimumZoomScale и maximumZoomScale для разных (по умолчанию они равны 1.0).

Примечание . Интересная вещь в этом заключается в том, что если вы хотите разорвать масштабирование. Достаточно ли вернуть nil в viewForZooming... метод? Это разрывает масштаб, но некоторые из жестов будут испорчены (для двух пальцев). Поэтому, чтобы разбить масштабирование, вы должны установить минимальную и максимальную масштабную шкалу в 1.0.

Прочитайте этот учебник Рэй Вендерлих:

http://www.raywenderlich.com/76436/use-uiscrollview-scroll-zoom-content-swift

Если вы пройдете через раздел «Прокрутка и масштабирование изображения большего размера», он получит изображение вверх и позволит вам зажать и увеличить масштаб.

В случае, если ссылка будет изменена, вот основная информация: Поместите этот код в свой controller просмотра (это устанавливает основную функциональность):

 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() } 

Добавьте это в class:

 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) } 

Если вы хотите более подробно прочитать учебник, но это в значительной степени охватывает его.

Убедитесь, что вы установили свой viewController в качестве делегата scrollViews и реализуете:

 func viewForZooming(in scrollView: UIScrollView) -> UIView? { return imageView } 

Проверьте tucan9389 / ZoomableScrollView forked из huynguyencong / ImageScrollView.
Просто создайте ZoomableScrollView и вызовите display(view:) .

DEMO

DEMO

Применение

 import ZoomableScrollView class ViewController: UIViewController @IBOutlet weak var zoomableScrollView: ZoomableScrollView! override func viewDidLoad() { super.viewDidLoad() let myView = MyCustomView() zoomableScrollView.display(view: myView) } } 

Я не думаю, что это работает для iOS 5.0 и Xcode 4.3+ Im, ища то же самое здесь, я нашел это для изображений, но это может вам помочь.

http://www.youtube.com/watch?v=Ptm4St6ySEI

  • UIScrollView Бесконечная прокрутка
  • UIScrollview с UIButtons - как воссоздать трамплин?
  • UIScrollView. Любые мысли о реализации «бесконечной» прокрутки / масштабирования?
  • Центральное содержимое UIScrollView при меньшем
  • UITextView внутри UIScrollView с AutoLayout
  • Изучение основ UIScrollView
  • Как прокрутить UITableView в определенную позицию
  • Прокрутка двумя пальцами с помощью UIScrollView
  • как удалить subviews из scrollview?
  • Получение видимого прямоугольника содержимого UIScrollView
  • Отключить прокрутку UIScrollView, когда UITextField становится первым ответчиком
  • Interesting Posts

    Объединение int в строку с использованием препроцессора C

    Рабочий пример CreateJobObject / SetInformationJobObject pinvoke в .net?

    Как создать временную таблицу в базе данных Oracle?

    Как установить часовой пояс java.util.Date?

    Поведение MySQL «выберите для обновления»

    В Java, используя оператор switch с диапазоном значений в каждом случае?

    Лучший способ расширения плагина jQuery

    TypeError: window.initMap не является функцией

    Каков ваш любимый инструмент профилирования (для C ++)

    Как сообщать о вредоносных сайтах в Google, Microsoft, Mozilla и т. Д., Чтобы они предупреждали пользователей

    Какие файлы открываются конкретным приложением?

    Расшифровка AES256 с помощью node.js возвращает неверную длину конечного блока

    Купить версию старой версии Windows и получить бесплатную версию?

    Пример триангуляции для iBeacons

    Несколько портов (8005, 8080, 8009), требуемых Tomcat Server на локальном хосте, уже используются

    Давайте будем гением компьютера.