4

私はかなり長い間これで立ち往生しています。私は他の多くの回答とAppleの例を見てきました。

私が知りたいのは、UIScrollView に大きな画像を読み込んで、Photos アプリのようにページを移動してズームインする方法です。

大きな画像をスクロールする必要があるアプリに取り組んでいます (大きな画像とは、1024 x 1024 を超える画像を意味します)。写真アプリと同様の機能を既に実装しています。ただし、大きな画像を使用しているため、メモリの警告などが表示されます。警告が表示される理由はわかっており、画像を並べて表示する必要があることもわかっています。

Apple の例は、既に存在する小さな画像を使ったタイリングを示しています。私のアプリは複数の画像をダウンロードしてディスクに保存し、ユーザーは後でそれらを見ることができます。したがって、他のプログラムを使用して画像を切り取ることはできません。

フルサイズの画像を並べて表示できるものが必要です。どんな助けでも大歓迎です。さらに、前述したように、Tiling で何かをしなければならないこともわかっています。しかし、私はこれに慣れていないので、出発点として使用できるサンプルコードが回答に含まれていれば幸いです。

私は他の質問を見てきましたが、満足のいく回答が得られなかったようです。そのため、この質問を再度尋ねています。

再度、感謝します!

4

1 に答える 1

3

タイリングを使用するには、ビューで CaTiledLayer を使用する必要があります。ググれば良い情報が得られます。基本的に、UIVIew がそれを使用していることを宣言し、ズームの詳細レベルをいくつか宣言し、drawRect で各タイルを rect パラメータとして受け取ります。

画像を並べて表示するには、UIImage を読み込み (メモリを使用しますが、表示するよりはかなり少なくなります)、必要なタイルごとに次のように使用します。

UIGraphicsBeginImageContextWithOptions(tileSize, YES, 1);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(ctx, -tileSize.width * columnNumber, -tileSize.height*rowNumber);
[img drawInRect:CGRectMake(0, 0, tileSize.width, tileSize.height)];
UIImage* imgCut = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

imgCut を保存します。CATiledLayer で異なるレベルの詳細を使用する場合、異なるズームでタイリングを生成したいと思うでしょう。

于 2011-09-06T18:40:31.673 に答える