我如何正确观察scrollView子类的contentOffset属性?

在我的iOS应用程序中,我正在观察对scrollView子类的contentOffset属性的更改。 我的观察者处理程序看起来像这样:

- (void)observeContentOffsetHandler:(id)aContentOffset { NSLog(@"%@", aContentOffset); } 

为了简单起见,我为了方便而select了该方法的参数。

我的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值,但是我不知道如何获取它们。 我已经试图将该身份证转换为CGPoint,不。 我试过把参数改成CGPoint,不行。

UPDATE

它变得更深。 @ mgold没有喜悦。 以下是我如何设置观察:

 self.contentOffsetObserver = [[[Observer alloc] initWithTarget:self action:@selector(observeContentOffsetHandler:)] autorelease]; [self.myScrollViewSubclass addObserver:self.contentOffsetObserver forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:NULL]; 

观察员是一个方便的类,我用它来使观察变得容易。 注意观察者callbackobserveContentOffsetHandler:。 当我改变这个方法的签名时:

 - (void)observeContentOffsetHandler:(id)aContentOffset 

到@Mgold对CGPoint的build议:

 - (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 

不知道我的举动是什么。

得到它了。 方法正确的签名是:

 - (void)observeContentOffsetHandler:(NSValue *)aContentOffset 

检索CGPoint是微不足道的:

 CGPoint pt = [aContentOffset CGPointValue]; 

干杯,
道格

既然你有一个UIScrollView的子类,你可以访问layoutSubViews
每次contentOffset改变时都会调用它。

这是在发生变化时“正确的方式”。 不要使用KVO是的contentOffset是一个CGPoint ….除非你在谈论NSScrollView …..但即使如此,基本的想法保持不变。

重写layoutSubviews ….记得调用超级

要么

将您的ViewController注册为scrollView的委托并实现scrollView:didScroll

contentoffset确实是一个CGPoint ,它是一个C结构体,包含CGFloatxy 。 所以简单

 aContentOffset.x aContentOffset.y 

因为你是UIScrollView的子类,所以你也有contentoffset属性,只是说。