Используем UIScrollView

Для использования UIScrollView обязательно нужно задать область, которая будет «скролится». Задается это свойством экземпляра UIScrollView:

//
// proSwift.ru
//

scrollView.contentSize = CGSize(width: 1500, height: 1500)

Все дальнейшее добавляем уже внепосредстваенно в scrollView:

//
// proSwift.ru
//

scrollView.contentSize = CGSize(width: 1500, height: 1500)
let someView = UIView()
someView.frame = CGRect(x: 1000, y: 1000, width: 20, height: 30)
scrollView.addSubview(someView)

Обратите внимание, что для задания позиции someView мы используем координаты scrollView.contentSize

Таким образом, получается что UIScrollView — это окно, через которое можно просмотреть contentSize

Очень полезное свойство для нахождения верхней левой точки UIScrollView:

//
// proSwift.ru
//

let upperLevtOfVisible: CGPoint = scrollView.contentOffset

Также мы можем увидеть прямоугольник, который в данный момент показывает UIScrollView:

//
// proSwift.ru
//

let visibleRect: CGRect = someView.convertRect(scrollView.bounds, fromView: scrollView)
println("\(scrollView.bounds)")
println("\(someView.convertRect(scrollView.bounds, fromView: scrollView))")

В этих строках кода есть хитрость: convertRect(). Эта функция конвертирует координаты одного view в систему координат другого view.

Вызов двух последних строк показывает параметры  CGRect в различных системах координат:

(0.0, 0.0, 375.0, 667.0) — координаты visibleRect относительно scrollView 

(-100.0, -100.0, 375.0, 667.0) — координаты visibleRect относительно someView

Итак, для того чтобы поместить что-то большое в  UIScrollView нужно выполнить следующее, и не забыть задать contentSize

//
// proSwift.ru
//

let image = UIImage(named: "bigimage.jpg")
let imageView = UIImageView(image: image)
scrollView.addSubview(imageView)
scrollView.contentSize = imageView.bounds.size

Дополнительны методы:

Программно проскролить к прямоугольнику:

//
// proSwift.ru
//

scrollView.scrollRectToVisible(CGRect, animated: Bool)

Зумминг:

Приближение и отдаление не будет работать пока не будут заданы параметры:

//
// proSwift.ru
//

scrollView.minimumZoomScale = 0.2 // 20 % от нормального размера
scrollView.maximumZoomScale = 3.0 // увеличение втрое от нормального размера

Также обязательно нужно задать метод делегата, с помощью которого указать какое именно view мы будем зуммить

//
// proSwift.ru
//

func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView?

Программно задать зум можно следующими свойствами и методами scrollView:

//
// proSwift.ru
//

var zoomScale: CGFloat
func setZoomScale(CGFloat, animated: Bool)
func zoomToRect(CGRect, animated: Bool)

 

Метки:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.