В моем приложении для iOS я наблюдаю за изменениями свойства contentOffset моего подкласса scrollView. Мой обработчик наблюдателя выглядит так:
- (void)observeContentOffsetHandler:(id)aContentOffset {
NSLog(@"%@", aContentOffset);
}
Для простоты я произвольно выбрал параметр метода в виде id.
Мой NSLog'ging выглядит так:
-[MyScrollView observeContentOffsetHandler:] [Line 111] NSPoint: {296, 375}
-[MyScrollView observeContentOffsetHandler:] [Line 111] NSPoint: {296, 389}
-[MyScrollView observeContentOffsetHandler:] [Line 111] NSPoint: {295, 401}
-[MyScrollView observeContentOffsetHandler:] [Line 111] NSPoint: {291, 415}
Мне нужно использовать значения x и y, но я понятия не имею, как их получить. Я пробовал приводить id к CGPoint, нет. Я пробовал изменить параметр на CGPoint, нет.
Все глубже. @mgold никакой радости. Вот как я настраиваю наблюдение:
self.contentOffsetObserver = [[[Observer alloc] initWithTarget:self action:@selector(observeContentOffsetHandler:)] autorelease];
[self.myScrollViewSubclass addObserver:self.contentOffsetObserver forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:NULL];
Observer - это удобный класс, который я использую для простоты наблюдения. Обратите внимание на обратный вызов наблюдателя observeContentOffsetHandler:. Когда я меняю сигнатуру этого метода с текущей:
- (void)observeContentOffsetHandler:(id)aContentOffset
на предложенную @mgold'ом CGPoint:
- (void)observeContentOffsetHandler:(CGPoint)aContentOffset
Она некорректна, как показывает NSLog, со всеми нулями для aContentOffset:
-[MyScrollController observeContentOffsetHandler:] [Line 74] aContentOffset 0 0
-[MyScrollController observeContentOffsetHandler:] [Line 74] aContentOffset 0 0
-[MyScrollController observeContentOffsetHandler:] [Line 74] aContentOffset 0 0
-[MyScrollController observeContentOffsetHandler:] [Line 74] aContentOffset 0 0
Не уверен, каков здесь мой ход.