Mo DeJong の 7 つの便利な iOS 開発 SDK (1)

この記事は http://www.modejong.com/iOS/#ex7 から翻訳されたものです


Mo DeJong 氏は、自身のブログで7 つの興味深いサンプル SDK プログラム(Xcode 3.2.5 および iOS 4.2 用) を提供しました。「これらのプログラムとプロンプト情報は開発者向けに特別に書かれていますが、ソース コードは「現状のまま」で書かれています。一般に公開。" これら 7 つの SDK をテストします。著者は怠け者ですが、コード スニペットとスクリーンショット、および必要に応じて変更したコードを提供します。私の開発環境は Xcode 4.5 + iOS 5.1 で、これらの「古いコード」を実現したいと考えています。


目次:

(1) マルチレベルの UITableView

(2) PNGアニメーション

(3) ExtendedAudioFile APIを使用してCAF形式を読み書きします

(4) PCM ミキシングに CoreAudio を使用する

(5) AutoPropertyReleaseクラス(メモリを自動解放するクラス)

(6) CoreAudioのフェードアウト効果を改善

(7)7zip(LZMA)SDK


このブログではそのうちの(1)(2)について触れ、その他のSDKについては次回以降のブログで説明します。 




例 1: マルチレベル UITableView

「あなたも、UITableViewを使うのは少し難しいと思いませんか? 複数レベルのTableViewを作成する便利な方法があることを発見しました...ただし、これはテキストのみの場合です。 TextTableData クラスが自動的に TableView を定義する方法」 - これは、作成者が遭遇した状況と解決策です。


   


ソースコード: TextTableExample.zip (30kb)

直接コンパイルして実行するとエラーが報告されることに注意してください。問題は、Xcode 4.5 が NSString クラスに値を割り当てるための数値の使用をサポートしなくなったことです。(他の Cocoa クラスにも同じことが当てはまります) したがって、変換を行う必要があります。

レガシーコード

	for (TextTableElement* ttElement in inElements) {
		label = ttElement.label;
		label += 0x1; // Avoid compiler warning
	}

新しいバージョンのコード

	for (TextTableElement* ttElement in inElements) {
		label = ttElement.label;
        int intLabel = [label intValue];
		intLabel += 0x1; // Avoid compiler warning
        label = [NSString stringWithFormat:@"%d",intLabel];
	}

このようにして、NSStringの値をスムーズに増加させることができます。


コードはスムーズに実行されます。しかし、現在の「大衆の基準」からすると、そのようなデザインは基本的には役に立たないように思えます。ここでは、別の「マルチレベル」TableView、折りたたみ可能な TableView をお勧めします。

http://blog.csdn.net/kmyhy/article/details/5979560 

code4app の優れた TableView の例もチェックしてください。

http://code4app.com/ios/TableView%E7%9A%84%E5%90%84%E7%A7%8D%E6%93%8D%E4%BD%9C/50bf05986803fa8e5c000001

この例は多くのアプリで使用されるパターンであり、大量のデータを含む TableView を整理するのに非常に適しています。




例 2: PNG アニメーション

iPhone/iOS は gif 形式のアニメーションの再生をサポートしていないため、アニメーションの連続再生には「救国曲線」的な方法が必要ですが、ほとんどの人は、目的を達成するために、より馴染みのある CoreAnimation を選択して画像を連続再生することになると思います。このクラスメートの Mo DeJong はオーディオとビデオの処理に特に興味があるようで、MediaPlayer.framework の MPMoviePlayerController を使用しています。「MPMoviePlayerControllerを使っていると、私と同じように髪の毛を抜きたくなるはずです…」 著者は、公式APIで提供されている機能のほとんどは、音声や動画を再生するために「自分で改良する必要がある」と考えており、彼が言った「いくつかの PNG 画像を継続的に再生する」という要件を完了できません。MPMoviePlayerController はそれを処理できず、CoreAnimation がすべてのメモリを占有してしまいます。どうすればよいでしょうか? 著者の例を見てみましょう。480x320 PNG 画像の 30 フレームを 15FPS で再生します。後で CPU パフォーマンスとオーディオ サポートについて多くのことを述べましたが、理解できないため、盲目的に翻訳することはしません。


 


ソースコード: PNGAnimatorDemo.zip (165kb)

このコードは正常に動作し、著者の説明によると、彼のメソッドはすべてのフレームを読み取ってメモリを埋めるのではなく、必要なときにのみ画像をロードします。まず、CoreAnimation の「キャッシュされた」画像再生方法を見てみましょう。

imageView =[[ UIImageView alloc ] initWithFrame : CGRectMake (0, 100, 320, 320)];
imageView . animationImages =images;
[images release ];
imageView . animationDuration =10;
imageView . animationRepeatCount =100;
[ imageView startAnimating ];

基本的な考え方は、画像の NSMutableArray 配列を用意し、画像を 1 つずつ画像にロードし、連続再生のために imageView に渡すことです。

そして彼の方法は、次のコードを繰り返すことです。

	if ((frame >= animationNumFrames) || (frame < 0))
		return;
	
	NSData *data = [animationData objectAtIndex:frame];
	UIImage *img = [UIImage imageWithData:data];
	imageView.image = img;


両者に大きな違いはないようですが、ここのanimationDataも全てのフレームを事前に読み込んでいます。ここで著者が述べている効率化は、現在の開発環境ではそれほど明らかな効果はないと思います。




まずはこの 2 つを分析して、明日も続けてみましょう。

==============================================

この記事の引用元: http://blog.csdn.net/zh405123507

タグ:iPhone開発 iOS開発 Xcode UITableView CoreAnimation


おすすめ

転載: blog.csdn.net/zh405123507/article/details/8567411