1

私が欲しいのは、背景として繰り返しタイル画像を持っているUIScrollViewです。

この質問に対する明白な答えは次のとおりです。

myScrollView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"myRepeatingImage.png"]];

ただし、このソリューションには複数の問題があります...

  1. パフォーマンスはひどいです。
  2. ズームでは正しく「機能」しません。

次の考えは、UIView(これをbackgroundViewと呼びます)を背景色として繰り返し画像を使用してmyScrollViewに追加し、すべてのサブビューをbackgroundViewに追加することです。ただし、これは、backgroundViewのサイズを絶えず変更することで非常に厄介になる可能性があるため、ユーザーがズームアウトしたときに(一時的に最小ズームレベルを超えても)、backgroundViewの「周囲」を見ることができません。

助言がありますか?

この質問に似ていますが、質問は 背景としてパターン画像を使用した未回答のUIScrollViewでした

4

2 に答える 2

1

これがあなたがやりたいことだと思います。

UIImageViewのいくつかの数(z)を背景として配置します。これらを別のコントロールに抽出して、「背景ビュー」を1つ追加するだけで済みます。上下左右にスクロールしたいとします。また、コンテンツサイズを超えてズームアウトする必要があります。したがって、スクロールビューの幅をカバーするためにx個の画像が必要であり、ズームで幅をバッファリングするためにs個の画像が必要です。(yは高さをカバーし、tはバッファーの高さを表すため、z = x + r + y + t)

補足:幅をバッファリングするとは、コンテンツサイズの範囲外にある原点に画像を配置することを意味します。そうすれば、コンテンツの境界を超えてズームアウトすると、背景の「周り」ではなく、これらの画像が表示されます。

十分な距離を右にスクロールしたら(スクロールビューの境界に関連する画像サイズ、または表示されているフレームに基づいて)、表示されなくなった画像ビューを右端の画像ビューの右側に移動します。左、上、下にスクロールする場合と同様のことを行います。ズームが発生したときに画像ビューを追加/削除する必要がある場合があります...または、常に必要な最大数の画像ビューを使用するだけです。

ポイントはパフォーマンスを向上させることであるため、理想的には、操作する画像ビューの数は少なくなります。この数は、sizeof(scrollview.bounds)/ sizeof(image)に比例して増加します。sizeofは、当然、バイトではなくフレームサイズを意味します。

編集:この概念を説明するのを助けるために、私たちは次のアナロジーを作るかもしれません。スクロールビューはタイル張りの床の一部を見ているレンズであり、スクロールビューのコンテンツの背景はタイル張りの床です。ただし、レンズをベースにしたタイルは十分な量しか使用していません。レンズが移動すると、非表示のタイルがレンズの移動先の領域に移動します。レンズがズームアウトすると、タイルが追加されます(ズームイン時にタイルが削除された場合)。それが混乱を招くのではなく、物事を片付けるのに役立つことを願っています。

于 2012-10-05T18:07:12.657 に答える
0

これは私のために働いた:

scrollView.backgroundColor = UIColor.init(patternImage: UIImage(named: "repeatable paper background" )! )

うまくいけば、それがこれを見つけた人の助けになることを願っています。

于 2016-02-29T05:57:15.560 に答える