我如何正确观察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结构体,包含CGFloat
的x
和y
。 所以简单
aContentOffset.x aContentOffset.y
因为你是UIScrollView
的子类,所以你也有contentoffset
属性,只是说。