наблюдать за свойством «перетаскивания» представления прокрутки, но не получил уведомления

У меня есть пользовательское UIView, которое добавляется как subView к UIScrollView, и я хочу, чтобы UIView автоматически перемещалось всякий раз, когда прокручивается UIScrollView. В дополнение к наблюдению за свойством UIScrollView's contentOffset (которое работает нормально), мне также нужно наблюдать за его свойством dragging:

[scrollView addObserver:self 
             forKeyPath:@"dragging" 
                options:NSKeyValueObservingOptionNew 
                context:NULL];

но в методе observeValueForKeyPath:ofObject:change:context я не получил ни одного NSNotification за изменение свойства dragging, в чем тут проблема? Спасибо.

обновлен

Поскольку я собираюсь повторно использовать этот пользовательский UIView в нескольких UIViewControllers, я хочу, чтобы пользовательское представление само обрабатывало логику изменения положения, а не дублировало логику изменения положения в каждом методе UIViewController's UIScrollViewDelegate (например, scrollViewDidScroll).




Ответы (2)


UIKit в целом не совместим с KVO. Тот факт, что некоторые свойства могут генерировать уведомления об изменениях, ненадежен — он не задокументирован и может измениться в будущих версиях и т. д.

Поскольку вам нужно повторно использовать эту логику репозиции, почему бы не разделить ее должным образом? Кстати, вы можете поместить его в свой собственный класс представления.

person Max O    schedule 13.07.2012
comment
Спасибо. Я нахожу другой способ, который больше не требует наблюдения за свойством dragging. - person Pwn; 13.07.2012

Или вы устанавливаете делегата для вас UIScrollView и реализуете scrollViewDidScroll:

person iSofTom    schedule 13.07.2012
comment
Поскольку я собираюсь повторно использовать это пользовательское представление в нескольких контроллерах представления, я хочу, чтобы пользовательское представление само обрабатывало логику изменения положения, а не дублировало логику изменения положения в методах UIScrollViewDelegate каждого контроллера представления (например, прокрутка ScrollViewDidScroll). - person Pwn; 13.07.2012
comment
Попробуйте переопределить метод layoutSubviews в вашем классе, этот метод вызывается, когда представление должно размещать свои подпредставления. - person iSofTom; 13.07.2012