6

私の iOS アプリでは、scrollView サブクラスの contentOffset プロパティへの変更を観察しています。私のオブザーバーハンドラーは次のようになります。

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

CGPointの@mgoldの提案に:

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

ここでの私の動きが何であるかわかりません。

4

3 に答える 3

6

とった。メソッドの正しい署名は次のとおりです。

- (void)observeContentOffsetHandler:(NSValue *)aContentOffset

その場合、CGPointの取得は簡単です。

CGPoint pt = [aContentOffset CGPointValue];

乾杯、
ダグ

于 2012-01-05T12:52:51.623 に答える
2

UIScrollView サブクラスがあるため、layoutSubViews にアクセスできます
。 contentOffset が変更されるたびに呼び出されます。

これは、変更が発生したときに変更を取得するための「適切な方法」です。KVO を使用しないでください。

layoutSubviews をオーバーライドします.... super を呼び出すことを忘れないでください

また

ViewController を scrollView のデリゲートとして登録し、scrollView:didScroll を実装します。

于 2012-01-04T19:52:58.377 に答える
0

contentoffsetは確かにであり、これはsと。CGPointを含むC構造体です。だから単純にCGFloatxy

aContentOffset.x
aContentOffset.y

あなたはサブクラス化しているので、あなたはただ言うだけで、プロパティUIScrollViewも持っています。contentoffset

于 2012-01-04T15:19:16.530 に答える