Android も FirefoxOS も TizenOS も UbuntuTouch も Linux そんな時代なんですね。
今回はiOS開発で使った事のある OSSライブラリ の紹介です。また Objectice-C のデリゲートの基本的な使い方を書きます。
便利なオープンソースライブラリ
facebook風なサイドビュー
facebookのような人気アプリと似たUIはユーザに受け入れられやすいので使いやすいです。
JWNavigationController
折り紙のようなアナログ感のあるサイドビュー
独特なアナログ感のある動きかつ軽量な所が好きです。
リンク先に動画があるので動きはそちらで確認してください。
UIView+Origami
カスタムモーダルビュー
画面全体を覆わないモーダルビューです。表示時のアクションもいい感じです。
UAModalPanel
JSONライブラリ
サーバとの通信時によくお世話になるJSONフレームワークです。
まあ、Apple公式のJSONフレームワークもありますけど…
SBJson
Delegateの基本的な使い方
AppDelegate
AppDelegateのプロパティをViewControllerから参照しグローバル変数のように扱います。
(主要箇所以外は省略しています)
// AppDelegate.h
@property int globalCounter;
// AppDelegate.m
@synthesize globalCounter;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.globalCounter = 5;
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
// ViewController.h
#import "AppDelegate.h"
// ViewController.m
-(void)referAppDelegate{
AppDelegate* appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
NSLog(@"Reference from AppDelegate %d",appDelegate.globalCounter);
}
コンソールにReference from AppDelegate 5 と表示されます。
MyDelegate
自作のDelegateクラスを作ると任意のタイミングでデータの受け渡しができます。
(主要箇所以外は省略しています)
// sampleDelegate.h
@class sampleDelegate;
@protocol smpDelegate
-(void)didFinishMethod:(sampleDelegate*)smp;
@end
@interface sampleDelegate : NSObject{
id delegate;
}
@property (nonatomic, retain) id delegate;
@property int counter;
-(void)countNumber;
// sampleDelegate.m
@synthesize delegate;
-(void)countNumber{
self.counter = 10;
[self.delegate didFinishMethod:self];
}
// ViewController.h
#import "sampleDelegate.h"
@interface ViewController : UIViewController
// ViewController.m
- (void)viewDidLoad
{
sampleDelegate *smp = [[sampleDelegate alloc]init];
[smp setDelegate:self];
[smp countNumber];
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
-(void)didFinishMethod:(sampleDelegate*)smp{
NSLog(@"didFinishMethod : %d",smp.counter);
}
console に didFinishMethod : 10 と表示されます。
objective-cのselfへの理解がポイントだと思います。
プロパティリストの小ネタ
plistはXML形式とバイナリ形式をサポートしています。
XMLはバイナリに対して冗長ではありますが可読性は高いです。
plistの編集は一歩間違うと読み込めなくなるので、以下の文法チェックコマンドを用いると便利です。
$ plutil -lint *.plist
XCode4.x系で「Developer Tools Accessはデバッグを続けるためにほかの..」の解決
コンソールで以下のコマンドで解決します。
$ sudo dscl . append /Groups/_developer GroupMembership [ユーザ名]
UserInterfaceState.xcuserstatのgitignore
XCodeのGUIリポジトリ管理ツールを使っている場合, .gitignore に記述するだけではダメみたいです。
$ git rm --cached CatCode.xcodeproj/***.xcworkspace/xcuserdata/***.xcuserdatad/UserInterfaceState.xcuserstate
rm
以上を commit すれば OK です。