IPhoneアプリ開発

提供: 文具堂 Wiki三昧
移動先: 案内検索

iOSアプリ開発 (iPhone iPad iPod touch)

概要

iOS SDKを使ったiPhone、iPadアプリ開発でよく利用するコードをまとめています。

公式ドキュメント

Swiftによるアプリ開発入門 Start Developing iOS Apps (Swift)

Objective-CからSwiftへの移行 Migrating Your Objective-C Code to Swift

iOS Dev Center - Apple Developer

http://developer.apple.com/iphone/

iPhone 仕様

ステータスバー: 20px, ナビゲーションバー(上): 44px, ツールバー(下): 44px

実描画ピクセル 幅: 320px 高さ: 480-20(電波・電池など)=460px

iPhone 3GS 480×320ピクセル 解像度163ppi

iPhone 4, 4S 960×640ピクセル 解像度326ppi

iPhone 5, 5s 1,136 x 640ピクセル解像度、326 ppi (568×320)

iPhone 6, 6s 1,334 x 750ピクセル解像度、326ppi

iPhone 6 Plus, 6s Plus 1,920 x 1,080ピクセル解像度、401ppi

http://www.apple.com/jp/iphone/compare/

iPad 仕様

iPad 1024×768ピクセル 132 ppi

http://www.apple.com/jp/ipad/specs/

Swift UIViewサブクラスに必要なInitializer

class SomeView: UIView {
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
}

Objective-C 単体でコンパイルするコマンド

cc -o hello Hello.m -framework Foundation

アラートの表示

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"エラー" message:@"入力値が不足しています"
                     delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[alert show];

NSString 文字列処理

NSStringで改行をいれる

\は 「option(alt) + ¥」 で入力

@"一行目\r\n二行目"

文字列と数字の変換

整数から文字列への変換
NSString *number = [NSString stringWithFormat:@"%d", 101];

文字列から整数への変換
NSInteger number = [@"101" integerValue];
int number = [@"101" intValue];

UIView全般

UIViewを角丸、UIViewに枠線

QuartzCore.frameworkを事前に追加する必要がある
#import <QuartzCore/QuartzCore.h>

// 角丸
[[view layer] setCornerRadius:10.0];
[view setClipsToBounds:YES];

// 角丸 Swift
view.layer.cornerRadius = 10.0
view.clipsToBounds = true // bounds領域外を表示しない 本当に必要か?

// 枠線
[[view layer] setBorderColor:[[UIColor lightGrayColor] CGColor]];
[[view layer] setBorderWidth:1.0];

// 枠線 Swift
view.layer.borderColor = UIColor.lightGrayColor().CGColor
view.layer.borderWidth = 1.0

UIViewの背景色 UIColor

カラー名で指定
self.view.backgroundColor = [UIColor blueColor];

RGBAで指定
label.backgroundColor = [UIColor colorWithRed:0.0 green:0.5 blue:1.0 alpha:1.0];

背景の色に透過させる
label.backgroundColor =  [UIColor clearColor]

UILabel(ラベル)

self.label.text = @"hoge";
self.label = [[UILabel alloc] initWithFrame:CGRectMake(10, 4, 30, 30)];
self.label.textAlignment = UITextAlignmentCenter; // 中央寄せ
self.label.font = [UIFont systemFontOfSize:20];
self.label.backgroundColor = [UIColor clearColor];

ボールド
self.label.font = [UIFont boldSystemFontOfSize:30];

影をつける(シャドウ)
self.label.shadowColor = [UIColor whiteColor];
self.label.shadowOffset = CGSizeMake(0, 1);

iOS9 固定幅数字フォント設定

let bodyFontDescriptor = UIFontDescriptor.preferredFontDescriptorWithTextStyle(UIFontTextStyleBody)
let bodyMonospacedNumbersFontDescriptor = bodyFontDescriptor.fontDescriptorByAddingAttributes(
    [
        UIFontDescriptorFeatureSettingsAttribute: [
            [
                UIFontFeatureTypeIdentifierKey: kNumberSpacingType,
                UIFontFeatureSelectorIdentifierKey: kMonospacedNumbersSelector
            ]
        ]
    ])
label.font = UIFont(descriptor: bodyMonospacedNumbersFontDescriptor, size: label.font.pointSize)

ボタンタップアクションメソッド

// インターフェイスビルダーから利用しないのであれば@IBActionは必要ない

@IBAction func saveButtonTapped(button: UIButton) {
    #if DEBUG
        print("saveButtonTapped")
    #endif
}

UINavigationController ナビゲーションバー

次の画面へ遷移する (push)

let controller = self.storyboard!.instantiateViewControllerWithIdentifier("EditView") as! EditViewContoroller
self.navigationController!.pushViewController(controller, animated: true)

前の画面へ戻る (pop)

self.navigationController!.popViewControllerAnimated(true)

UINavigationController Navigation Barにテキストボタンを追加

    UIBarButtonItem *reloadButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"更新"
                                        style:UIBarButtonItemStylePlain target:self action:@selector(reloadStatuses)];

    self.navigationItem.rightBarButtonItem = reloadButtonItem;
    [reloadButtonItem release];

UINavigationController Navigation Barの戻るボタンのテキストを固定する

呼び出し元コントローラのviewDidLoadに書く

let backButton = UIBarButtonItem()
backButton.title = "カレンダー"
self.navigationItem.backBarButtonItem = backButton

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] init];
backButton.title = @"ホーム";
self.navigationItem.backBarButtonItem = backButton;

Navigation Barの色を黒にする

バーの色を黒にする
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;

アプリケーション全般

iPhoneとiPadの判定

// iPhoneの場合
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
}

// iPadの場合
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
}

自動ロック(スリープ)の抑制

UIApplication.sharedApplication().idleTimerDisabled = true

[UIApplication sharedApplication].idleTimerDisabled = YES;

Viewをロックして操作できないようにする

コントローラから操作することを想定

self.view.userInteractionEnabled = NO;

UINavigationControllerを使用している場合
self.navigationController.view.userInteractionEnabled = NO;

ロケール(多言語化)関連

多言語化したテキストの出力

// *NSLocalizedString(NSString *key, NSString *comment)
NSString *done = NSLocalizedString(@"done", @"完了");

iOS端末に現在設定されているロケール(言語設定)を取得

    if ( [[[NSLocale preferredLanguages] objectAtIndex:0] isEqualToString:@"ja"] ) {
        // ロケールが日本語の場合
    } else {
        // ロケールが日本語以外の場合
    }