6

UISrollView の境界よりも広いページを持つページング UIScrollView を作成するための推奨される方法はありますか?

このようなものが必要になります。

ここに画像の説明を入力

page2 内の通常のスクロールと、ページの端に「ラバーバンド」効果のあるページング モード。

ページング効果は私には少し複雑に見えます。すばやくフリックすると次のページに移動し、ゆっくりスライドすると端に新しいページが表示され、特定のポイントの後でのみページが変更されます。

誰かがこれを処理する方法に光を当てることができるかもしれませんが、これは UIScrollViewDelegate メソッドのみを使用しても可能ですか、それともサブクラス化する必要がありますか?

4

3 に答える 3

2

私が感銘を受けた。これは実際、最初に思っていたよりもはるかに簡単でした。

簡単な解決策は、各ページを非ページングスクロールビューにカプセル化することでした。そして完了。UIScrollViewDelegateを実装する必要はなく、サブクラス化する必要もありません。追加の3行のコード

通常のサイズのページの場合、次のようなものがありました。

UIView *myCustomView = [[[UIView alloc] initWithFrame:CGRectMake(totalWidth, 0, width, height)] autorelease];
[mainScroller addSubview:myCustomView];
totalWidth += width;

そして今私はこれを持っています:

UIView *myCustomView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, bigWidth, height)] autorelease];
UIScrollView *secondaryScroller = [[[UIScrollView alloc] initWithFrame:CGRectMake(totalWidth, 0, width, height)] autorelease];
[secondaryScroller setContentSize:myCustomView.frame.size];
[secondaryScroller addSubview:myCustomView];
[mainScroller addSubview:secondaryScroller];
totalWidth += width;

3行。すばらしい。


ビュー階層:

<UIScrollView: 0x4b32eb0; frame = (0 0; 768 1004); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x4b32d00>; contentOffset: {0, 0}>
   | <UIScrollView: 0x4b32710; frame = (0 0; 768 1004); clipsToBounds = YES; layer = <CALayer: 0x4b35580>; contentOffset: {0, 0}>
   |    | <UIView: 0x4b33f70; frame = (0 0; 1352 1004); layer = <CALayer: 0x4b16c20>>
   | <UIScrollView: 0x4b34790; frame = (768 0; 768 1004); clipsToBounds = YES; layer = <CALayer: 0x4b33e10>; contentOffset: {0, 0}>
   |    | <UIView: 0x4b30fa0; frame = (0 0; 789 1004); layer = <CALayer: 0x4b329f0>>
   | <UIScrollView: 0x4b34920; frame = (1536 0; 768 1004); clipsToBounds = YES; layer = <CALayer: 0x4b33180>; contentOffset: {0, 0}>
   |    | <UIView: 0x4b30d00; frame = (0 0; 1398 1004); layer = <CALayer: 0x4b33120>>
   | <UIScrollView: 0x4b31fe0; frame = (2304 0; 768 1004); clipsToBounds = YES; layer = <CALayer: 0x4b32170>; contentOffset: {0, 0}>
   |    | <UIView: 0x4b34c50; frame = (0 0; 863 1004); layer = <CALayer: 0x4b31f80>>
   | <UIScrollView: 0x4b32460; frame = (3072 0; 768 1004); clipsToBounds = YES; layer = <CALayer: 0x4b325f0>; contentOffset: {0, 0}>
   |    | <UIView: 0x4b323d0; frame = (0 0; 1064 1004); layer = <CALayer: 0x4b32400>>
于 2011-04-19T14:13:47.297 に答える
0

私はこのチュートリアルを使用しました -

http://www.edumobile.org/iphone/iphone-programming-tutorials/pagecontrol-example-in-iphone/

より大きなページを作成する場合は、このチュートリアルの PageControlExampleViewControl のビューのサイズを大きくすることができます。幅をデフォルトの 320 ではなく 360 にするとします。

于 2011-04-18T16:07:26.273 に答える
0

私の知る限り、scrollviews ページング プロパティを使用して直接これを実現する方法はありません。

独自のUIScrollViewサブクラスを実装する必要があり、実装ファイル内で以下を実装する必要があります。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
-(void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event; 

プロパティを使用して、スクロール ビューがどれだけスクロールしたかを調べcontentOffsetます。

また、UIScrollViews を使用scrollRectToVisible:して、独自のカスタム スクロール機能を実装します。

[self scrollRectToVisible:CGRectMake(horizontalScrollAmount,virticalScrollAmount,rectWidth,rectHeight) animated:NO];

イベントのチェーンは次のようなものです: 開始タッチの位置を記録し、タッチが移動した場合は、x/y 座標が開始位置よりも大きいか小さいかを確認して、移動した方向を見つけます。 touched を画面上で十分に動かした後、 を使用して、指定したページング サイズだけビューをスクロールしますscrollRectToVisible:

于 2011-04-18T14:37:23.987 に答える