Как включить масштабирование в UIScrollView - программирование
Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

Ответ здесь:

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

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

Так:

  1. Вам нужен делегат, который реализует UIScrollViewDelegate и настроен на delegate в вашем экземпляре UIScrollView
  2. В вашем viewForZoomingInScrollView: вы должны реализовать один метод: viewForZoomingInScrollView: (который должен возвращать представление контента, которое вас интересует масштабирование). Вы также можете реализовать scrollViewDidEndZooming:withView:atScale: опционально.
  3. В вашем экземпляре 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+ Я искал то же самое здесь, я нашел это для изображений, но это может вам помочь.

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