私がやろうとしていることは次のとおりです。フルスクリーン画像を表示し、UISliderをスライドさせてその画像をアニメーション化するアプリが必要です。スライダーの値を変更すると、アニメーションを作成する配列の画像が順番に表示されます。このアニメーションは、ターンテーブル上の1人のキャラクターです。スライダーの値が変わると、キャラクターはターンテーブルの周りを回転しているように見えます。
このプロジェクトは、3Dアーティストのためのポートフォリオ作品です。アーティストは、フルスクリーンの網膜解像度でレンダリングされたキャラクターの180枚の画像のシーケンスを私にくれました。彼はまた、網膜以外のフルスクリーン解像度でレンダリングされた追加の180枚の画像を提供しました。アイデアは、誰かが網膜iPadで任意の角度からキャラクターを表示しているときに、UISwitchを使用して網膜ディスプレイと非網膜ディスプレイを切り替えることができるというものです。以下に投稿されたコードは、シミュレーターで正常に機能します。
ただし、このコードをiPad 4で実行すると、少しの間機能し、メモリの警告が表示されます。その後、クラッシュします。誰かがスライダーを動かしたいのと同じくらい速く表示されるそのサイズの多くの画像を持っていることは、iPad4が処理するには多すぎると思います。
このような画像を扱うときに考慮すべき制限について知りたいです。180枚の画像が多すぎませんか?妥当な金額はいくらですか?希望する結果を生成するためのより効率的な方法はありますか?画像がいくつクラッシュしないかを推測して確認するのではなく、誰かが私の問題について役立つ洞察を持っているのではないかと思いました。
@implementation RBViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_imageDisplay.image = [UIImage imageNamed:@"HyperReal_0.png"];
_arrayRetina = [[NSMutableArray alloc] initWithCapacity:180];
_arrayNormal = [[NSMutableArray alloc] initWithCapacity:180];
for(int i = 0; i < 179; i++)
{
NSString *myImageString = [[NSString alloc] initWithFormat:@"HyperReal_%i.png", i];
UIImage *myImageGraphic = [UIImage imageNamed:myImageString];
[_arrayRetina addObject:myImageGraphic];
}
for(int i = 0; i < 179; i++)
{
NSString *myImageString = [[NSString alloc] initWithFormat:@"lameHyperReal_%i.png", i];
UIImage *myImageGraphic = [UIImage imageNamed:myImageString];
[_arrayNormal addObject:myImageGraphic];
}
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)switchButton:(id)sender {
if (_switchOnForRetina.isOn == YES)
{
_imageDisplay.image = [_arrayRetina objectAtIndex:_sliderBar.value];
}
else
_imageDisplay.image = [_arrayNormal objectAtIndex:_sliderBar.value];
}
- (IBAction)changeSlider:(id)sender {
if (_switchOnForRetina.isOn == YES)
{
_imageDisplay.image = [_arrayRetina objectAtIndex:_sliderBar.value];
}
else
_imageDisplay.image = [_arrayNormal objectAtIndex:_sliderBar.value];
}
@end