ラベル xcode7 の投稿を表示しています。 すべての投稿を表示
ラベル xcode7 の投稿を表示しています。 すべての投稿を表示

2016年7月6日水曜日

CoreAnimation Lesson.(Lesson2-2) - UIViewAnimationOptions/アニメーションイージングカーブ編

前回(Lesson2-1)ではブロックベースメソッドを使用した簡単なアニメーション実装について説明しました。引き続き、UIViewクラスのブロックベースアニメーションメソッドを使用したアニメーションについて説明していきます。

CoreAnimation Lesson.シリーズへのリンク。
アニメーションイージングカーブ
UIViewクラスのブロックベースアニメーションメソッド。
[Animating Views with Block Objects]
+ animateWithDuration:delay:options:animations:completion:
class func animateWithDuration(_ duration: NSTimeInterval,
                         delay delay: NSTimeInterval,
                       options options: UIViewAnimationOptions,
                    animations animations: () -> Void,
                    completion completion: ((Bool) -> Void)?)

前回あまり詳しく説明出来なかった引数optionsについて説明します。 options引数は複数指定出来ますが、大きく3種類に分類することができて、

  • アニメーションの振る舞い
  • アニメーションイージングカーブ ←今回説明する部分
  • トランジションエフェクト

について設定出来ます。optionsの型は、UIViewAnimationOptionsとなっておりswiftだと構造体で、Objective-Cたと、emunで定義されている様です。 今回は、アニメーションイージングカーブについて説明します。

アニメーションイージングカーブは以下に示す4種類の設定が可能です。
UIViewAnimationOptions 概要
CurveEaseInOut ゆっくり始まって、加速して、ゆっくり止まる。
(デフォルト)
CurveEaseIn ゆっくり始まって、加速して急に止まる。
CurveEaseOut 急に始まり、ゆっくり止まる。
CurveLinear 初めから最後まで一定速度。
実装

基本的には以下に示す基本的なブロックベースアニメーションメソッドを使用します。以下は例としてoptionにCurveEaseInOutを指定しています。

    // EaseInOut
    let option:UIViewAnimationOptions = .CurveEaseInOut
    UIView.animateWithDuration(duration, delay: delay, options: option, animations: {
        // animation
        self.myView.frame.origin.y = topBarHeight + 50
            
    }) { (complete) in
        NSLog("animation completed.")
        // アニメーション完了時の処理
        self.myView.backgroundColor = UIColor.redColor()

    }

それでは実際に動かしてみましょう。

UIViewAnimationOptions.CurveLinear

UIViewAnimationOptions.CurveLinearは、はじめから最後まで一定速度のアニメーション。

図.Linearアニメーションカーブ
図.UIViewAnimationOptions.CurveLinear
UIViewAnimationOptions.CurveEaseInOut

UIViewAnimationOptions.CurveEaseInOutは、ゆっくり始まって、加速して、ゆっくり止まります。Linear指定との違いをわかりやすくするため、右側の図では、左側にLinearを指定したもの、右側にEaseInOutを指定したViewをアニメーションしています。

図.EaseInOutアニメーションカーブ
図.UIViewAnimationOptions.CurveEaseInOut
UIViewAnimationOptions.CurveEaseIn

UIViewAnimationOptions.CurveEaseInは、ゆっくり始まって、加速して急に止まります。右側の図では左側にLinearを指定し、左側にEaseInを指定したアニメーションです。

図.EaseInアニメーションカーブ
図.UIViewAnimationOptions.CurveEaseIn
UIViewAnimationOptions.CurveEaseOut

UIViewAnimationOptions.CurveEaseOutは、急に始まり、ゆっくり止まります。右側の図では左側にLinearを指定し、左側にEaseOutを指定したアニメーションです。

図.EaseOutアニメーションカーブ
図.UIViewAnimationOptions.CurveEaseOut

サンプルプログラムはGitHubにあります。https://github.com/takuran/CoreAnimationLesson

CoreAnimation Lesson.シリーズへのリンク。

2016年6月26日日曜日

Core Animation Lesson.(Lesson2-1) - 基本のアニメーション

アニメーションしてみよう(Lesson2-1)

前回はCALayerの基本的な振る舞いやプロパティについて記載しました。

  • Lesson1(CALayerのプロパティについて)
  • Lesson1-4〜(CALayerのプロパティについて続き)
  • Lesson1-7(カスタム描画)
  • 今回は実際にアニメーションを実践してみます。難しそうな暗黙的アニメーションとか明示的アニメーションの説明は置いておいて、別の機会に説明できればと思います。

    一番簡単にアニメーションを実装するには、UIViewクラスのブロックベースアニメーションメソッドを使用することです。
    現時点(iOS9)で、ブロックベースのアニメーションメソッドは、大きく3種類ありますね。
    
     • アニメーション(直線的)
     • トランジションアニメーション(画面が移り変わるようなアニメーション)
     • キーフレームアニメーション(非直線的)
     
    
    アニメーション(直線的)

    簡単なアニメーション実装であればこのメソッドで十分でしょう。一番ベーシックなアニメーション実装です。アニメーション用のブロックベースメソッドはスプリングのようなバウンドアニメーションを実現するメソッドも有りますが、まずはスプリングアニメーションの無い、基本のブロックベースアニメーションメソッドを試してみます。

    Viewが画面上方向へ移動するだけのアニメーションです。上記アニメーションの実装は以下のようになります。(swift)

    // アニメーション実行
    UIView.animateWithDuration(0.5, delay: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: {
    
        // myViewの中心点y座標を変更
        self.myView.center.y = 100
                
    }) { (complete) in
    
        // アニメーションが完了したら、myViewの背景色を赤色に
        self.myView.backgroundColor = UIColor.redColor()
                
    }
    

    アニメーション時間0.5秒で、myView(アニメーションしているViewです)の中心点y座標を100に変更して、アニメーションが完了したらmyViewの背景色を赤色に変更します。簡単ですね。たったこれだけのコードでアニメーション出来てしまいます。

    上記アニメーションを実装しているUIViewクラスのアニメーションブロックメソッドの定義が以下です。(swift)

    class func animateWithDuration(_ duration: NSTimeInterval,
                             delay delay: NSTimeInterval,
                           options options: UIViewAnimationOptions,
                        animations animations: () -> Void,
                        completion completion: ((Bool) -> Void)?)
    

    引数の意味は、

    引数 意味
    duration アニメーション全体の実行時間(秒)。短ければ早いアニメーション、長ければ遅いアニメーションになる。
    delay 遅延時間(秒)。指定した時間待ってからアニメーションが実行される。
    options アニメーションオプション。実行するアニメーションに対するオプションを指定する。詳細はいずれしますが、例ではアニメーションカーブを指定しています。UIViewAnimationOptions列挙型で指定可能なアニメーションカーブは主に、CurveLinear, CurveEaseInOut, CurveEaseIn, CurveEaseOut となっています。デフォルト値はCurveEaseInOut(ゆっくり加速して、ゆっくり減速して終わる)です。
    animations アニメーションブロックオブジェクト。UIViewクラスのanimatable propertiesのパラメータを操作する。
    completion 完了時ブロックオブジェクト。アニメーション完了時に実行する処理を記載する。
    animations引数

    animationsブロックでは、アニメーション終了時の値を設定します。つまり、アニメーションはアニメーション開始前の値とanimationsブロックで指定するアニメーション終了時の値を元に、その間の値を直線的に補完することでアニメーションを行います。変更可能な値は以下に示すUIViewクラスのアニメーション可能なプロパティに限られています。

    • @property frame
    • @property bounds
    • @property center
    • @property transform
    • @property alpha
    • @property backgroundColor
    • @property contentStretch
    例えば、

    [Viewを動かしたい場合(move)]

    centerかframeのoriginを変更するのかな良いでしょう。これは一番はじめの例の通りです。

    // アニメーション実行
    UIView.animateWithDuration(0.5, delay: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: {
    
        // myViewの中心点y座標を変更
        self.myView.center.y = 100
                
    }) { (complete) in
     
        // アニメーションが完了したら、myViewの背景色を赤色に
        self.myView.backgroundColor = UIColor.redColor()           
    }
    

    [Viewのサイズを変更したい場合(scale)]

    frameのsizeかtransformを使用するのが良いでしょう。上記はtansformを使用してviewの高さ、幅を2倍に拡大しています。animationsブロックのコードは以下のようになるでしょう。

    // アニメーション実行
    UIView.animateWithDuration(0.5, delay: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: {
    
        // サイズ変更
        // transform
        let transform = CGAffineTransformMakeScale(2.0, 2.0)
        self.myView.transform = transform
                
    }) { (complete) in
    
        // アニメーションが完了したら、myViewの背景色を赤色に
        self.myView.backgroundColor = UIColor.redColor()           
    }
    

    [透過させたい場合(alpha)]

    alpha を変更します。上記はalpha値を変更してだんだんと透明になっていくアニメーションです。animationsブロックのコードは以下のようになるでしょう。

    // アニメーション実行
    UIView.animateWithDuration(0.5, delay: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: {
    
        // alpha
        self.myView.alpha = 0.0
                
    }) { (complete) in
    
        // アニメーションが完了したら、myViewの背景色を赤色に
        self.myView.backgroundColor = UIColor.redColor()           
    }
    

    [背景色を変更したい場合(bgcolor)]

    backgroundColor を変更します。上記は背景色が青色からだんだんと赤色へアニメーションします。animationsブロックのコードは以下のようになるでしょう。

    // アニメーション実行
    UIView.animateWithDuration(0.5, delay: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: {
    
        // 背景色
        self.myView.backgroundColor = UIColor.redColor()
                
    }) { (complete) in
    
        // アニメーションが完了したら、myViewの背景色を赤色に
        self.myView.backgroundColor = UIColor.redColor()           
    }
    

    あと、boundsとcontentStretchが出て来ていませんが、あまり用途は無いと思います。 こちらか こちらを参照する事でなんとなくイメージがつかめるでしょう。

    [複数のプロパティ値を組み合わせたアニメーション]

    例として、プロパティを一つづつ変更しましたが、移動しながら、拡大縮小、フェードアウトしたりと、それぞれを組み合わせても良いです。

    // アニメーション実行
    UIView.animateWithDuration(0.5, delay: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: {
    
        // 全て指定
        self.myView.center.y = 100
        let transform = CGAffineTransformMakeScale(2.0, 2.0)
        self.myView.transform = transform
        self.myView.alpha = 0.0
        self.myView.backgroundColor = UIColor.redColor()
                
    }) { (complete) in
    
        // アニメーションが完了したら、myViewの背景色を赤色に
        self.myView.backgroundColor = UIColor.redColor()           
    }
    

    凝ったアニメーションでなければ、殆どはこのメソッドでこと足りるでしょう。
    本ページで作成した確認用アプリはGitHubで公開しています。コードの詳細は次のURLを参照下さい。https://github.com/takuran/CoreAnimationLesson
    CoreAnimation Lesson.シリーズへのリンク。

    2015年11月23日月曜日

    iOSアプリケーションリリース手順(2015年11月版) (2/2)

    前回の続きから 引き継き、以下の流れで説明していきます。
    • 配布用Certificateファイルの作成
    • 配布用Certificateファイルの作成の確認
    • AppIDの作成
    • 配布用Provisioningファイルの作成
    • XcodeへProvisioningファイルの取り込み
    • 新規Appの登録
    • アプリケーション詳細情報登録
    • アーカイブの作成とアップロード
    「6.新規Appの登録」からになります。1〜5までは前頁(iOSアプリケーションリリース手順(2015年11月版) (1/2))の方を参照して下さい。
    新規Appの登録
    新規Appの登録はiTunes Connetへ接続しての作業になります。
    iTunes Connectにサインインします。
    iTunes Connect

    「マイApp」を選択します。左上にある「+」アイコンを選択します。
    マイApp追加

    「新規App」を選択します。
    新規Appの追加

    登録用フォームが表示されます。
    新規App登録フォーム

    プロパティ 概要
    プラットフォーム リリース対象のプラットフォームを選択します。
    名前 アプリケーションの名前を設定します。App Storeに表示されるアプリケーション名です。デバイスへインストール後にアイコン下に表示される名前ではありません。名前はローカライズの対象になります。(ローカライズの設定はApp登録後に変更画面から可能です)
    SEOの対象項目になりますが、説明文のような名前は却下されるようです。試しにApp Storeで指定したキーワードによる検索結果を見てみると参考になるかもしれません。
    プライマリ言語 アプリケーションの対応言語を指定します。日本語以外にも対応する場合は英語をプライマリ言語として設定し、日本語をローカライズ言語として設定した方が良いでしょう。
    バンドルID プルダウン形式で登録済みのApp IDがリストアップされますので選択します。
    SKU 一意に定まれば良いので、バンドルIDと同じで良いでしょう。因みにマニュアルによるSKUの説明は、「Appleシステム内でアプリケーションが持つ一意の IDであり、ユーザーには表示されません。英数字、 ハイフン、ピリオド、アンダースコアを組み合わせ て指定します。ただし、先頭をハイフン、ピリオ ド、アンダースコアにすることはできません。 自分の組織で分かりやすい値を使用してください。 」
    入力が完了したら、「作成」ボタンを押下します。作成ボタン押下にてマイAppに登録されています。

    アプリケーション詳細情報の設定
    新規Appの作成が完了すると「マイApp」の一覧として追加したAppが表示されます。
    マイApp

    アプリケーションを選択すると詳細設定画面へ遷移します。
    App情報

    「名前」の変更が可能です。また、ローカライズしている場合はローカライズした言語での名前の変更が可能です。
    ローカライズ設定

    アプリケーションの価格を設定します。
    価格設定

    アプリケーションの配信先国の変更が出来ます。
    配布先国の設定

    Bitcode自動再コンパイル設定。現状影響が良く分かりませんが、まずはデフォルト通り有効にしておきます。(チェックしない)
    Bitcode自動再コンパイル設定

    スクリーンショットの登録。アプリケーションで対応するデバイスのスクリーンショットを登録します。ローカライズに対応しており、右上のローカライズ言語を選択することでそれぞれローカライズした言語に対応したスクリーンショットの登録が可能です。
    スクリーンショット登録

    アプリケーションの概要、キーワード、サポートURL、マーケティングURLの登録。概要は特長や機能の詳細など、App に関する説明です。キーワードはApp を表現するキーワードが1つ以上必要です。キーワードを使用すると、App Store 検索結果がより正確になります。キーワードをコンマ(,)で区切ります。また、それぞれの値はローカライズ言語に対応した値を設定することが可能です。
    概要、キーワード等の登録

    Appアイコン、バーション、レーティング、Copyright、通商代表連絡先情報, Routing App Coverage File の登録。
    Appアイコンは1024x1024ピクセルのサイズを登録します。また、画像にアルファチャンネルや透過を含んでいるとエラーになります。
    バージョンは1.0, 1.0.1等のフォーマットです。このバーションはXcodeで設定したバーションを等しい必要があるようです。 レーティングは選択フォームが別途表示されます。
    Copyrightは組織名や個人名を入力します。
    通商代表連絡先情報は韓国のAppStoreにリリースする場合に必要です。設定内容はAppStoreに表示される(韓国のみ)ようですが、個人では無く、企業として登録した場合のみ表示されるようです。
    Routing App Coverage Fileはカーナビのような経路検索するようなアプリの場合に必要になると思うので、通常はそのまま指定無しでOKだと思います。
    一般情報の登録


    アーカイブの作成とアップロード
    アーカイブビルドの前にXcode上のReleaseビルドの設定を行います。モザイクだらけで分かり難くてすみませんが、作成したCertificateファイルとProvisioningファイルをここで指定します。
    Xcodeの設定

    補足ですが、「Automatic」の設定値があります。まだまだ勉強不足で良くわかっていないのですが、Bundle IDさえ決まってしまえばあとはBundle IDからAppIDが決定し、AppIDが決定すればProvisioningファイルも特定されるって事なのかなと勝手に想像していますが、定かではありません。「Automatic」を選択するような場合は下図のような設定でうまく動いているようでした。
    Provisioning ProfileのAutomatic設定

    アーカイブ実行します。
    アーカイブの実行

    Archiveが終わったら「Validate」を実施します。
    Validate実施

    Xcode7の場合、以下のワーニングが出力される場合があるそうです。私の場合は必ず以下のワーニングとなってしまいました。気にしないで続けて良いとの情報があったので、処理を進めます。
    Validate時のワーニング(Xcode7)

    Upload中
    Upload

    この後、同じワーニングが発生したが、Uploadは出来ているもようなので、先に進みます。
    iTunes Connectに戻り以下+を押下します。
    ビルド

    まだ処理中ですが、アップロードしたアプリケーションがあるので選択します。処理中の場合は選択できませんので処理中が終わってから選択します。もう、ここまで来たら後は右上の「審査へ提出」ボタンを押下します。
    ビルドの追加(処理中)

    最後に以下の問いがありますので、必要に応じてチェックを入れます。因みに広告IDですが、iADの場合は「いいえ」で良いです。右上の「送信」ボタンを押下すれば「審査待ち」となるでしょう。
    最後の質問

    ちょっと、後半力尽きたので、急いでしまいました。必要なところは今後アップデートしていきます。ありがとうございました。
    [AD]
    TECHNICAL MASTERはじめてのiOSアプリ開発Swift対応版
    長谷川 智希
    秀和システム
    売り上げランキング: 189,751
    詳解 Swift 改訂版
    詳解 Swift 改訂版
    posted with amazlet at 15.11.23
    荻原 剛志
    SBクリエイティブ
    売り上げランキング: 3,647

    iOSアプリケーションリリース手順(2015年11月版) (1/2)


    はじめに
    本投稿は2015年11月現在の情報を元に作成しています。XcodeやiTunes Connectの仕様はバージョンアップに伴い変更される可能性がありますので注意して下さい。
    加えて、OSとXcodeのバージョンやその他前提条件を以下に記載しておきますね。

    • OS: OS X El Capitan 10.11.1
    • Xcode: 7.1
    • Apple Developer Programには入会済み
    • XcodeへのApple IDアカウント登録済み
    • メンバーセンターやiTunes Connectへアクセスする場合はブラウザにSafariを用いてアクセスすること




    全体の流れ
    iOSアプリケーションのリリース作業はおおまかに以下の流れになります。(下図はApp Distribution Guideからの抜粋)

    リリースまでの流れ(App Distribution Guide抜粋)


    Apple Developer Programへの入会(Enroll in Program)、リリースするアプリケーションの実装(Develop App)は終わっているものとして、基本的に上記図の矢印以降の説明となります。
    以下の流れで説明していきます。

    • 配布用Certificateファイルの作成
    • 配布用Certificateファイルの作成の確認
    • AppIDの作成
    • 配布用Provisioningファイルの作成
    • XcodeへProvisioningファイルの取り込み
    • 新規Appの登録
    • アプリケーション詳細情報登録
    • アーカイブの作成とアップロード
    配布用Certificateファイルの作成(配布用証明書ファイルの作成)
    配布用のCertificateファイルの作成を行います。Apple DevelopperのWEBサイトから登録することも可能ですが、Xcode上からCertificateファイルを作成することが可能です。ここではXcode上からの作成方法を示します。まずはXcode上からCertificate作成状態を参照してみましょう。メニューからXcode-preferenceを選択し、Accountsタブを選択します。AppleIDを選択し、View Detailを選択します。
    Xcodeメニュー

    メニューAccountsを選択し、右下の「View Details…」を押下。
    Accounts

    Certificateファイルの作成状況。「iOS Development」は開発用証明書で、「iOS Distriution」が配布用証明書になります。Actionの欄に何も表示されていないものは既に作成済みの状態となります。
    Certificate作成状況


    上記キャプチャでは既に作成済みのため「Create」ボタンが表示されていませんが、未作成の場合は表示されているはずです。配布用の証明書を作成するため、「Create」ボタンを押下します。一度「Done」を押下して画面を閉じます。 メンバーセンターを表示してCertificatesが作成されているか確認してみます。
    配布用Certificateファイルの作成の確認
    メンバーセンター(https://developer.apple.com/membercenter/)を表示してCertificatesが作成されているか確認してみます。
    Certificatesに「iOS Distribution」のCertificateファイルが作成されていることを確認します。
    Certificateを選択

    配布用証明書の確認

    また、Keychain Accessを使用して確認することも出来ます。Keychain Accessを起動します。ログインキーチェーンの証明書に作成したDistributionの証明書が表示されていれば作成されていることになります。

    Keychain Accessによる確認
    AppIDの作成
    AppIDは複数のアプリケーションに対応するワイルドカード形式のものと、特定のアプリケーション限定での使用を前提とした特定形式の2種類存在します。ワイルドカード形式のものはXcode上でApple IDを設定していると自動で作成されているかもしれません。メンバーセンターから確認すると以下のようなNameのワイルドカードAppIDが既に作成されていると思います。
    Xcodeから作成されたワイルドカードAppID

    今回はリリース対象のアプリケーション特定のAppIDを作成してみます。メンバーセンターのApp IDsのページ右上の「+」ボタンを押下します。
    AppIDの作成

    App ID Descriptionの設定。アプリケーションの名前や概要を設定します。ここで指定した名前がAppIdを一覧表示した際(上図)の「Name」欄に表示されます。 区別が付けば何でも良いでしょう。
    Name

    App ID Suffixの設定。アプリ特定のIdを生成するので、「Explicit App ID」を選択して、Bundle IDを入力します。Boundle IDはリバースドメイン形式で設定することが推奨されています。(例:com.foo.bar.TestApp)
    Bundle ID

    App Serviceを設定します。アプリケーションで使用しているサービスにチェックをつけます。設定が終わったら一番下にある「Continue」ボタンを押下します。
    App Services

    確認画面が表示されます。確認して問題がなければ「Submit」ボタンを押下します。
    Submit

    App IDsの一覧画面から新たに参照すると、作成したApp IDが登録されていることを確認出来ます。下図はモザイクばかりですみませんが、App ID Descriptionで指定した名前が「Name」欄に存在していれば作成出来ていることになります。
    App ID 作成確認

    配布用プロビジョニングファイルの生成
    メンバーセンターから配布用のプロビジョニングファイルの作成を行います。「App Store」を選択し、「Continue」ボタンを押下します。
    Provisioningファイルの作成

    App IDを選択します。さきほど作成したApp IDがプルダウンリストにあるので選択し「Continue」を押下します。
    AppIDの選択

    Certificatesファイルを選択します。これも配布用として作成したCertificatesファイルが選択肢が表示されていますので、選択して「Continue」ボタンを押下します。
    Certificateファイルの指定

    Provisioning Profileの名前を入力します。Provisioning Profileを識別出来る名前を入力して「Generate」ボタンを押下します。
    Profile Name設定

    作成されたProvisioning Profileの情報が表示されます。
    作成したProvisioningプロファイルの確認

    XcodeへProvisioningファイルの取り込み
    先ほど作成した配布用Provisioning ProfileをXcodeへ取り込みます。Xcodeを起動してメニューの「Xcode」- 「Preferencess…」を選択し、「Accounts」タブを選択します。Apple IDとして登録してあるアカウントを選択すると右下に「View Details…」ボタンがありますので押下します。
    Accounts

    先ほど作成したProvisioning Profileが表示されていますので、Action欄にある「Download」ボタンを押下します。ダウンロードが完了して正常に取り込まれると「Download」ボタンが消えます。また、既に取り込まれている場合も「Download」ボタンは消えているようです。
    Provisioning Profileのダウンロード

    これで配布用Provisioning Profileの作成は完了です。
    次は「新規Appの登録」になりますが、続きは次のページになります。iOSアプリケーションリリース手順(2015年11月版) (2/2)こちらを参照下さい。
    [AD]