2015-10-05 2 views
0

У меня есть UIScrollView, определенный на моей раскадровке, с выходом. Этот scrollview получает UIImageView, добавленный к нему через код (а не на раскадровку). Когда я запускаю приложение, изображение растягивается из аспекта. Как только я коснусь изображения, оно привязывается к соответствующему соотношению сторон.UIImageView в формате ScrollView не работает

Что здесь происходит ?!

@IBOutlet var scrollView: UIScrollView! 

var imageView = UIImageView() 
var selectedImage: UIImage! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    scrollView.delegate = self 
    imageView.frame = CGRectMake(0, 0, scrollView.frame.size.width, scrollView.frame.size.height) 
    imageView.image = selectedImage 
    imageView.contentMode = .ScaleAspectFit 
    imageView.userInteractionEnabled = true 


    scrollView.contentMode = .ScaleAspectFit 
    scrollView.addSubview(imageView) 

    let scrollViewFrame = scrollView.frame 
    let scaleWidth = scrollViewFrame.size.width/scrollView.contentSize.width 
    let scaleHeight = scrollViewFrame.size.height/scrollView.contentSize.height 
    let minScale = min(scaleHeight, scaleWidth) 
    scrollView.minimumZoomScale = 0.3 
    scrollView.maximumZoomScale = 1 
    scrollView.zoomScale = minScale 

    centerScrollViewContents() 


    self.closeBtn.layer.cornerRadius = CGRectGetWidth(self.closeBtn.frame)/20.0 


} 

При загрузке: enter image description here

После перемещения зума на всех: enter image description here

ПОЧТИ ИСПРАВЛЕНО: Я редактировал код для определения imageView.frame в viewWillLayoutSubviews вместо viewDidLoad, как было предложено в ответах ниже. У меня теперь есть новая проблема - изображение не может увеличиться ... это позволяет вам увеличивать масштаб до тех пор, пока вы не отпустите свои пальцы, а затем снова вернется к исходному размеру.

Это связано с тем, что scrollView.maximumZoomScale не достаточно большой?

исправленный код:

override func viewWillLayoutSubviews() { 
    super.viewWillLayoutSubviews() 
    imageView.frame = CGRectMake(0, 0, scrollView.frame.size.width, scrollView.frame.size.height) 
} 
override func viewDidLoad() { 
    super.viewDidLoad() 

    scrollView.delegate = self 
    //imageView.frame = CGRectMake(0, 0, scrollView.frame.size.width, scrollView.frame.size.height) 
    imageView.image = selectedImage 
    imageView.contentMode = .ScaleAspectFit 
    imageView.userInteractionEnabled = true 


    scrollView.contentMode = .ScaleAspectFit 
    scrollView.addSubview(imageView) 

    let scrollViewFrame = scrollView.frame 
    let scaleWidth = scrollViewFrame.size.width/scrollView.contentSize.width 
    let scaleHeight = scrollViewFrame.size.height/scrollView.contentSize.height 
    let minScale = min(scaleHeight, scaleWidth) 
    scrollView.minimumZoomScale = 0.3 
    scrollView.maximumZoomScale = 2.0 
    scrollView.zoomScale = minScale 

    centerScrollViewContents() 


    self.closeBtn.layer.cornerRadius = CGRectGetWidth(self.closeBtn.frame)/20.0 


} 
+0

Вы можете оставить снимок экрана для лучшего понимания. –

+0

Да, так будет: – Charlie

ответ

1

Это слишком рано, чтобы установить рамку в -viewDidLoad() метод

если и напечатает scrollView.frame в -viewDidLoad() это будет на самом деле возвращение кадр перед вашим представлением будет макетом, это подпункты.

Так что вам нужно сделать ограничения для ImageView или в viewWillLayout переопределить imageView.frame.

+0

Большое спасибо, что зафиксировал загрузку в неправильном аспекте. Теперь я не могу «остановиться», хотя ... есть ли вероятность увидеть проблему в приведенном выше обновлении? Цените свою помощь :) – Charlie

+0

Попробуйте такой трюк в viewWillLayoutSubviews(): imageView.frame = CGRectMake (0, 0, scrollView.frame.size.width * scrollView.zoomScale, scrollView.frame.size.height * scrollView.zoomScale) Но было бы лучше поставить ограничения на изображение, а не переопределять его фрейм в -viewWillLayoutSubviews – user3017488

+0

Я пытаюсь выяснить, как это будет работать с ограничениями, но я не хочу беспокоить вас, прося больше Помогите. Я буду читать о добавлении ограничений в код. Если вы почувствуете дополнительную мотивацию, какой-нибудь пример применения ограничений будет полезен - я всегда делал их в раскадках, и UIScrollviews, похоже, всегда вызывали у меня проблемы. – Charlie

Смежные вопросы