reborn @reborn ?

3 年と 3 か月前に活動
  • reborn が講義お題「ボタンとの接続」に投稿しました (寺子屋 アバター教えて!iPhoneアプリ開発全般)   3 年と 3 か月前 · 表示

     日本語訳された入門チュートリアル「iPhone101.pdf」の「テキストフィールドおよびラベルのアウトレットを作成する」の章がストーリーボード上のオブジェクトをプログラム上で認識するための情報です。

     日本語に翻訳されたドキュメントの「iOS View Controller プログラミングガイド」の「カスタムContent View Controllerの作成」と「表示関連の通知への応答」の章が画面が表示された時におこないたい事をするための情報です。
     「iOS Viewプログラミングガイド」の「ビュー階層の作成と管理」がボタン等を消したり見せたりするための情報です。

     コードは書き込むしかないですね。
     紙芝居のように、1つの画面から別の画面に切り替えるくらいならストーリーボードだけで可能です。
     そのための情報がストーリーボードの入門チュートリアルに書かれています。

  • reborn が講義お題「ボタンとの接続」に投稿しました (寺子屋 アバター教えて!iPhoneアプリ開発全般)   3 年と 3 か月前 · 表示

    iOSアプリ開発はUIViewとUIViewControllerの関係を理解するのが基本です。

    Appleが用意した最新の入門チュートリアルは下のリンクです。
    キレイにまとまってるんだけど英語です。もうちょっとしたら翻訳されるかな〜
    https://developer.apple.com/library/ios/referencelibrary/GettingStarted/RoadMapiOS/

    日本語に翻訳されたドキュメントはこのページに集められます。
    iOS View プログラミングガイド、iOS View Controller プログラミングガイドが必須の知識となるでしょう。
    https://developer.apple.com/jp/devcenter/ios/library/japanese.html

    以前、日本語訳された入門チュートリアルはAppleが遺跡扱いにしたみたいですね。
    翻訳元の英語版が、上で紹介した最新入門チュートリアルにまとめられたので削除されたんでしょう。
    一応リンクは残ってるみたいだけど内容は古いです。
    https://developer.apple.com/jp/devcenter/ios/library/documentation/iPhone101.pdf

    ストーリーボードの入門チュートリアルも同じ扱いみたい。
    https://developer.apple.com/jp/devcenter/ios/library/documentation/SecondiOSAppTutorial.pdf

  • reborn が講義お題「衝突音が残る理由が分りません。」に投稿しました (寺子屋 アバター教えて!iPhoneアプリ開発全般)   3 年と 3 か月前 · 表示

     UIDynamicAnimatorは衝突を知らせるだけで、知らせた先で何をやってるかは関知しません。
     AudioServicesPlaySystemSoundは指定されたサウンドを鳴らし切って終わるという仕様なので、ボールが消える消えないに関係なく指定した音が鳴り続ける事になります。
     音を好きなタイミングで止めたい場合、私はAVAudioPlayerを使う事にしています。
     何か他にもっと簡単なやり方があればいいんですが、誰か知りませんかね〜

     消すタイミングはUIView animateWithDuration:〜の完了処理で判断すればいいでしょう。

     ここらへんをいろいろ面倒見てくれるようになってるのがミドルウエアのUnityです。

  • reborn が講義お題「アラームアプリを作成したいのですが。。。」に投稿しました (寺子屋 アバター教えて!iPhoneアプリ開発全般)   3 年と 4 か月前 · 表示

     アプリ非起動時に通知を受けるためにはローカル通知というのを使います。
     これでカレンダーやアラームアプリと同じ事ができます。
     ここにある「Local および Push Notification プログラミングガイド」を読むといいでしょう。↓

    https://developer.apple.com/jp/devcenter/ios/library/japanese.html

  • reborn が講義お題「NSTimerで設定の時間内の動作をコントロールする方法?」に投稿しました (寺子屋 アバター教えて!iPhoneアプリ開発全般)   3 年と 4 か月前 · 表示

    _fireworkLayerViewをそのまま使えばいいです。

     _fireworkLayerView = v

    はFireworkLayerViewインスタンスを複製しているわけではありませんよ。
    作成したインスタンス に対し、vという名前は-viewDidLoad内でしか使えないので、どのメソッドでも使えるよう_fireworkLayerViewという名前も同時に付けただけです。

  • reborn が講義お題「NSTimerで設定の時間内の動作をコントロールする方法?」に投稿しました (寺子屋 アバター教えて!iPhoneアプリ開発全般)   3 年と 4 か月前 · 表示

     プルして、プルリクエストも送ってみました。
     Xcodeでプルすると、Xcode上でもブランチを切り替えられるようになります。
     ブランチに切り替えて変更部分を参考にするのでもいいですし、マスターにブランチをマージするのもいいでしょう。用が済んだらブランチは破棄してもらってかまいません。
     ↓ Xcodeでのブランチへの切り替えがわからない時は以下の後半を参考にしてください。

    http://ameblo.jp/xcc/entry-11715009956.html

     NSTimerをキャンセルする例として、画面が切り替わって見えなくなるタイミングを使う例を示しておきます。モーダルやタブバーでの別のViewControllerの画面に切り替えられた時に、見えない状態で花火を打ち上げても仕方ないという場合、このようにして未実行のNSTimerを止めます。
     FireworkLayerView.m側の打ち上げ位置調整は、そのままだとiPhoneで画面外になるので、iPad、iPhone両方での対応策の例です。

  • reborn が講義お題「NSTimerで設定の時間内の動作をコントロールする方法?」に投稿しました (寺子屋 アバター教えて!iPhoneアプリ開発全般)   3 年と 4 か月前 · 表示

     おお〜、ちゃんとGitHubから取り出せましたよ〜。

     -timerFireMethod:内で新しく作ったFireworkLayerViewに対してfireWorkメッセージを送っていますが、このFireworkLayerViewが画面にaddViewされていないので、そのまますぐに破棄されているのが原因です。
     -viewDidLoadでaddViewしたFireworkLayerViewに対してfireWorkメッセージを送るのがいいでしょう。

     GitHubに私のブランチをプッシュしようと思うのでSettings(図には私のリポジトリではないのでSettingsは出ていないけど、ここらへんです)のcollaboratorsに
    Takahiro-Kunii
    を登録してください。

  •  上の文章からはUIStoryboardから対象のStoryBoardIDを持ったViewControllerを呼び出す方法はわかっているようで、どこにつまずいているのか読み取れないんです。
     vcがnilならSubViewController9999を呼び出せばいいような気がするんだけど…

     どこに悩んでいるんですか。
     Storyboardを使った上での

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    での実装方法がわからないという事ですか?

  • reborn が講義お題「NSTimerで設定の時間内の動作をコントロールする方法?」に投稿しました (寺子屋 アバター教えて!iPhoneアプリ開発全般)   3 年と 4 か月前 · 表示

    って感じで複数のNSTimerをスケジュールしてはどうですか?

    あとは実行途中でキャンセルする時の事を考えて、呼び出されたメソッドではインスタンス変数にnilを入れるようにしておけば、未実行のNSTimerの判別もできるでしょう。
     キャンセルする時にはinvalidate送らないとメモリーリークする可能性もあるから気をつけて。

    最初NSTimerは1つだけつくり-timerFireMethod:内で、自分が何番目のタイマーか確認しつつ、新しくNSTimerを1つ作るというの有りだと思います。

  • reborn が講義お題「MagicalRecord(Core Data) の検索速度が遅い」に投稿しました (寺子屋 アバター教えて!iPhoneアプリ開発全般)   3 年と 5 か月前 · 表示

     それはよかった。
     「全文検索」という目標を知った時点で確実にレベルは1段上がってますよ。
     まあ、当面は「個数制限、オフセットを指定したフェッチ」で対応ですね。

     並べ替えを指定しなければ「10〜20文字程度で10万件」なら、それなりに改善されるんじゃないかと思いますが、それでも、最初に現状のプログラムに「個数制限、オフセットを指定」を加えてみて検索スピードを確認してみてくださいね。
     期待どおりでないなら

       エンティティ のAttribute に「法令の種類」を数値で追加

    を検討した方がいいでしょう。
     全文検索のためにSQLiteに全面移行よりは簡単なはずです。

     では、がんばってください!

  • reborn が講義お題「MagicalRecord(Core Data) の検索速度が遅い」に投稿しました (寺子屋 アバター教えて!iPhoneアプリ開発全般)   3 年と 5 か月前 · 表示

     おお、お買い上げありがとうございます。
     『iOS Core Data 徹底入門』の379ページで紹介しているのがインディックスなんですが、文字列だと効果はあやしいですね。ちなみにマイグレーションは10章で紹介しています。

     で、本題に戻ると、言われているような作業は全文検索と言って、それ専用の検索エンジンが用意されるくらい奥の深いものです。
     力任せな検索ではなく工夫が必要となります。
     例えば(むちゃくちゃ大雑把ですが考え方として)

     今日はいい天気です

    を文章Aとしてデータベースに登録するなら、それとは別に文章Aを

     今日、日は、はい、いい、い天、…

    というように分解して、それぞれの単語をデータベースに登録し、その単語ごとに文章Aへの関係を設定しておく。そして検索文字として

     今日はいい

    が与えられたなら

     今日、日は、はい、いい

    で単語側を検索して、各単語に共通の関係先の文章を捜すといった工夫です。
    この時、2文字を文字コードなどを基準に大きさで並べておけば、たとえ登録された単語が10〜100万あろうと、すぐに見つけ出せますし、そこから関係をたどって文章Aを見つけるのも簡単です。

     この他にも、やり方はいろいろありますし、実際の工程も「てにをは」を考慮したりと、はるかに複雑ですが、とにかく何らかの工夫が必要という事です。

     なので、現状だと個数制限、オフセットを指定したフェッチになると思います。
     UITableViewは後から項目を追加するだけなので、特に影響は受けません。

     1:0〜9までの文章をフェッチ
     2:UITableViewに0〜9までの文章を項目として表示。
     3:11〜19までの文章をフェッチ
     4:UITableViewの末尾に11〜19までの文章を項目として追加表示。

    といった感じでNSTimerなどを使い繰り返す事になります。
    もちろん、ユーザーが検索途中で別の画面に切り替えるときに、NSTimerやフェッチを取りやめる作業等の対応は必要です。

     検索が「法令の種類別」で限定できるのであれば、検索対象エンティティの Attribute に「法令の種類」を数値で追加しておき、フェッチする時にNSPredicateの内容を
     
      category=法令の種類 && story=文字列

    注)Attribute名は
     法令の種類;category
     文章:story
    としています。

    といったような指定をすれば、最初に「法令の種類」で絞り込んだ上で文字列検索となり、いくらか高速になると思います。

    Predicates Programming Guide:
    https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Predicates/predicates.html

     「法令の種類」別にCoreDataの永続ストアファイルをわけるのは、422ページが参考になると思いますが、その場合、永続ストアが別なのでエンティティ間で関係が結べなくなります。
     なのでエンティティ のAttribute に「法令の種類」を数値で追加がお勧めですね。

     これ書いた後に、思いついて「SQLite 全文検索」でググってみると、iOSでそのものズバリの事してる人がいました。Core DataではなくSQLiteを直接使うという方法も検討してみてはどうですか?
     ま〜、本でも書いたようにSQLiteのフルパワーが必要になる局面ってやつですね。

    http://blog.shoby.jp/entry/2013/11/09/171656

  • reborn が講義お題「MagicalRecord(Core Data) の検索速度が遅い」に投稿しました (寺子屋 アバター教えて!iPhoneアプリ開発全般)   3 年と 5 か月前 · 表示

     検索対象が10万件あると、さすがに検索内容によっては時間かかるでしょうね。
     検索しているのは文字列ですか?

     数値ならインディックスを付ける(マイグレーションが必要かも)事でなんとかなるかもしれません。
     あとはフェッチ時にオフセットと個数制限をかけて、少しずつ検索する事で見た目の即応性を向上させるくらいかな〜。
     NSFetchRequestのfetchLimit、fetchOffsetを使います。

  • reborn が講義お題「GitHub.comを使ってみよう」を開始しました (寺子屋 アバター知ってると便利!開発Tips):   3 年と 6 か月前 · 表示

     ここで質問される方の中には、プロジェクトをまるごと見せてどこが悪いのか教わりたいという人もいると思います。
     その場合、自分のプロジェクトを公開できるサイトとして有名なGitHub.comの利用を検討してみてください。
     名前、メールアドレス、パスワードを登録すれば、無料でプロジェクトを公開する事ができます。有料登録すれば、特定の仲間達だけでの開発という事も可能です。

    https://github.com

     Git自体はバージョン管理ツールとして分類されるもので、ソースの履歴を管理するのに使われ、主要機能はXcodeに組み込まれています。
     とりあえずXcodeで作成した新規プロジェクトをGitHub.comに公開する過程をまとめたので参考にしてください。

    http://ameblo.jp/xcc/entry-11779369152.html

  • rebornアバター知ってると便利!開発Tips 寺子屋に参加しました   3 年と 6 か月前 · 表示

  • reborn が講義お題「メモリーリークについて教えてください。」に投稿しました (寺子屋 アバター教えて!Xcodeエラーメッセージとその解決策)   3 年と 6 か月前 · 表示

     そうですね〜、効率的なというレベルまでいきたいですね。
     針だけを回転させる事も可能で、その場合、紹介したView、View Controller プログラミングガイドの他に、Core Animationプログラミングガイドなんかも役立つでしょう。
     XcodeのHelp→Documentation and API Referenceで表示される画面でCGAffineTransformMakeRotationをキーワードにしてサンプルコードを検索するのもいいでしょう。

     ではでは。

  • reborn が講義お題「メモリーリークについて教えてください。」に投稿しました (寺子屋 アバター教えて!Xcodeエラーメッセージとその解決策)   3 年と 6 か月前 · 表示

     プロパティhiddenはアニメーションに対応していないので即座に消えてしまう事になります。alphaだけ変更すればいいでしょう。画面上はalpha==0でhidden==YESと同じ状態です。
     beginAnimationは今はiOS 4以降はお勧めではないので+ animateWithDuration:animations:系を使うといいですよ。hiddenやbeginAnimationについての説明はいずれもUIView Class Referenceに書かれています。英語ですけど。
    XcodeのHelp>Documention and API Referenceメニューで探せます。

    >それらのUIImageをグループ化してfirstViewまたはsecondViewとすればいいと
    >いう事でしょうか?

     そうです。
     ストーリボードのエディタでUIViewの上にUIImageViewを置けば、そのUIViewのサブビューとしてUIImageViewがグループ化されます。

     この状態でUIViewのalphaを0にすれば、それだけでサブビュー側のUIImageViewも消えます。

    >UIViewのビューという事でしょうか?
    >UIViewのAと言うビューとBと言うビューをViewControllerに作り、
    >それぞれにImageViewでパーツをのせて行く感じでよいでしょうか?

    そうです。
     ビューの階層化については「iOS Viewプログラミングガイド」(View ControllerではなくViewの方)で学習するといいでしょう。

  • reborn が講義お題「メモリーリークについて教えてください。」に投稿しました (寺子屋 アバター教えて!Xcodeエラーメッセージとその解決策)   3 年と 7 か月前 · 表示

     -performSegueWithIdentifier:sender:や-presentViewController: animated: completion:(モーダル指定)で表示したUIViewControllerとそのビューは役目が終わった時点で-dismissViewControllerAnimated:completion:を使って表示を終わらせるのが重要なんで、その考え方自体は間違いではないんですが、SecondViewControllerでNSTimerを起動するタイミングとかNSTimerがターゲットを所有している点を考慮したプログラミングになるんで結構めんどくさいと思います。

     画面を操作する事が無く、単純に表示の切り替えだけなら、SecondViewControllerを使わずFirstViewControllerとNSTimerだけで、自分のビュー(FirstViewController のself.view)内で任意のビューの表示を切り替えるようプログラムするのが適切です。 

     例えばstoryboardでFirstViewControllerが持つビューに A と Bというビューを同じ大きさ、同じ位置に配置し、片方のalpha属性を0にして見えないようにしておき、NSTimerで時間ごとにAとBのalphaプロパティを0と1に切り替える方法です。
     そのさいにUIViewの+ animateWithDuration:animations:などを使ってalphaプロパティの変更をアニメーション化するといいでしょう。

  • reborn が講義お題「メモリーリークについて教えてください。」に投稿しました (寺子屋 アバター教えて!Xcodeエラーメッセージとその解決策)   3 年と 7 か月前 · 表示

    SecondViewControllerを作成し、そのviewを-presentViewController: animated: completion:で画面に表示させているだけで、-dismissViewControllerAnimated:completion:での取り外しをしていないのではないですか。

    タイマーが実行されるたびに
    SecondViewControllerのview
      その上に
    SecondViewControllerのview
      その上に
    SecondViewControllerのview
      その上に
    SecondViewControllerのview
    というように積み重なっているのでないかと思います。

    -presentViewController: animated: について、以下で「iOS View Controller プログラミングガイド」を読んでみてください。
    https://developer.apple.com/jp/devcenter/ios/library/japanese.html

  • reborn が講義お題「UIKitの連続アニメーション」に投稿しました (寺子屋 アバター教えて!iPhoneアプリ開発全般)   3 年と 8 か月前 · 表示

     テキストが消えるのはanimations:の中に

     _Text.text = @”";

    としているのが原因です。
     _Textも_Imageと同じ場所で

     _Text .transform = CGAffineTransformMakeScale(…

    とすればいいでしょう。
     もっとも、UIViewを1つ用意して、その上に_Image、_Textを貼付け、そのUIViewのtransformを加工する方法がスマートですね。

    連続アニメーションは
    -animateKeyframesWithDuration:delay:options:animations:completion:
    でググるといいですよ。

  • reborn が講義お題「UIKitの連続アニメーション」に投稿しました (寺子屋 アバター教えて!iPhoneアプリ開発全般)   3 年と 8 か月前 · 表示

     ストーリーボードのUse AutoLayoutの影響です。
     チェックを外せば希望どおりに動きます。
     AutoLayoutを利用する必要があるならtransformではなくframeを使うといいでしょう。

    CGRect frame = _imageView.frame;
      // 初期状態
    _imageView.frame = CGRectInset(frame, frame.size.width / 2, 0);
      // 広げるアニメーションで使用
      _imageView.frame = frame;

     また、アニメーションの繰り返しをfor (int i = 0; i<x; i++) {…}ループで制御する事はできません。
     completion:で必要なだけanimateWithDuration:を入れ子にする必要があります。
     スマートな対応をしたいなら-animateKeyframesWithDuration:delay:options:animations:completion:をUIViewKeyframeAnimationOptionRepeat指定付きで使用する必要があります。ただしiOS 7限定です。
     iOS 6以前もサポートしたいならCAAnimationを使う必要があります。

     それと、1.0秒間テキスト表示するのにはdelay:を使うといいでしょう。
    次のように2段階のネストで済みます。

  • もっと読み込む