2015-02-12 3 views
0

У меня есть ситуация, когда мне нужно изящно перемещать рамку, когда contentOffset.y является отрицательным значением.Есть ли 'willSet' и 'didSet' Я могу перехватить UIScrollview.contentOffset?

Проблема заключается в том, я не хочу, чтобы получить contentOffset позвонить ПОСЛЕ содержания уже упали ниже 0.

Есть ли willSet вызова, где я могу перехватить его до того, как UIScrollView смещает его содержание?

+0

В Objective-C вы можете регистрироваться для уведомлений при изменении границ прокрутки. Однако я мало знаю об использовании этого в Swift. –

+0

Вы имеете в виду делегата? – Aggressor

+1

Нет, я имею в виду 'NSNotificationCenter'. –

ответ

1

Вы можете легко добавить willSet в swift. Просто подкласс UIScrollView и только переопределить это, так. Очевидно, вы захотите сделать что-то помимо println, но я убедился, что это определенно срабатывает перед делегатом didScroll. Я не знаю, что это решит вашу проблему с анимацией, но это то, о чем вы просили.

import UIKit 

class MyScrollView: UIScrollView { 

    override var contentOffset: CGPoint { willSet { println("old value \(newValue)") } } 

} 
+0

Интересно, мне придется попробовать это спасибо! – Aggressor

0

Вы можете использовать методы делегата scrollViewDidScroll или scrollViewWillBeginDecelerating и перехватить contentOffset.y. Надеюсь, это поможет вам.

+0

didScroll уже имеет смещение содержимого, хотя – Aggressor

+0

'didScroll' будет вашим лучшим выбором, он будет постоянно вызываться, поскольку просмотр прокручивается, поэтому перемещение вашего фрейма (без или короткой анимации) должно быть плавным , –

+0

Это то, что я делаю, но это изменчиво, и, следовательно, почему я искал перехват вызова willSet, если возможно – Aggressor

2

Кажется, это работает:

class MyScrollView: UIScrollView { 
    override var contentOffset:CGPoint { 
     willSet { 
      println("newOffset: \(newValue)") 
     } 
    } 
} 

В вашем подклассе UIScrollView, просто переопределить willSet из contentOffset. Кажется, что вызывается до layoutSubviews().

+0

Блестяще спасибо – Aggressor

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