Objective-C
iOS開発でボタン以外の要素をタップさせたくなることがたまにあるかもしれない。例えばラベルとか画像とかね。 そういった場合によく取られる方法はもしかしたらtouchesBeganやtouchesEndedのイベントを使うことかもしれない。けれど、タッチ系のイベントで…
コールバック的に呼びたい処理をブロックプロパティにして使う方法。 ヘッダー typedef void (^Handler)(void); @interface MyViewController : UIViewController @property (nonatomic, copy) Handler handler; - (IBAction)buttonTapped:(id)sender; @end …
前にObjective-C向けのを見つけてこんなのを書いた。 Underscore.js風Objective-Cライブラリ「_.m」 - PILOG Swiftにも早速似たようなのが出てきたようだ。 Dollar.$wift by ankurp サンプルで比較 例としてfindのサンプルを。 Swift $.find([1, 2, 3, 4, 5,…
iOSには動画再生用にMPMovierPlayerViewControllerっていうクラスがあって、URLを渡して表示するだけでめちゃくちゃ簡単に動画再生機能を実装できる。すごく便利。 その分自由度が低くてちょっとした挙動を変えるのが大変だったりする。 まず、普通に動画を…
このあたりの処理はやり方がコロコロ変わるようなので検索しても情報が古くて困る。2014/06/07時点、Xcode5.1.1、iOS7.1 SDK時点での情報を書いておく。 正解はステータスバーを表示したくないViewControllerでprefersStatusBarHiddenをオーバーライドする。…
Swiftは出たけどまだまだObjective-Cはオワコンってことにはならないと思うからObjective-Cの話を。 Objective-Cで非同期処理をしてその結果を受けてなんかしたい、ってときが結構あるんだけど待ち方がいまいちよくわからなかったことがあった。今思えば基本…
SwiftとObjective-Cは相互に呼び合えるらしい。Objective-CからSwiftはすでに記事があった。 SwiftのコードをObjective-Cから呼んでみた - Qiita もしSwiftからObjective-Cのコードを呼べるのであれば、大抵のCocoaPodsライブラリは使い回せることになるので…
Objective-Cではカテゴリを使って既存のクラスに新しいメソッドを追加したかのように振る舞わせることができる。 では、カテゴリで新しいメソッドではなく、既存の(というかオーバーライドして使うようなもの)を定義するとどういう挙動になるのか。気にな…
Objective-Cではカテゴリを使って既存のクラスを拡張してメソッドを追加することができるが、メソッドだけでなくプロパティを追加することもできる。 例えばこんな風にUIViewのカテゴリを新規作成し、ヘッダーにプロパティを定義する。今回はNSStringにした…
Xcode標準のテストライブラリがうまいことやってくれないせいで、非同期処理のテストを書く場合に待ちの処理を自分で書いてあげないといけません。 最近のすごくいい感じの拡張が紹介されたのでこれを使うとなかなかいい感じです。 Objective-Cで非同期処理…
マニアックなライブラリを見つけたのでメモっておきます! _.m Home Underscore.js風のインターフェースを提供するObjective-Cのライブラリです。前書いたこれに少しだけ近い。 ActiveRecordのようなselectやwhereをObjective-Cで使う - PILOG 今回紹介する_…
Builderパターンてのは、生成が面倒なオブジェクトの生成をいい感じにするデザインパターンです。Objective-Cではブロックを使っていい感じにできるみたいですね。 例えば特定日時のNSDateを生成するには次のようなコードを書くことになります。そこそこ煩雑…
ソースコードにタグ付けするctagsはObjective-Cに対応していませんが、設定ファイルにパターンを書くことである程度対応させることができるようです。 設定ファイル~/.ctagsに以下を貼り付けます。 # ~/.ctags --langdef=objc --langmap=objc:.m.h --regex-o…
C++をある程度知っているというものあってObjective-Cの言語的なところはほぼスキップしてiOSの開発をしているという側面が僕にはあります。 で、Xcodeの警告でたまに出てくる__bridgeキャストってなんじゃいなと思いながらもIDEに任せて直してもらっていた…
LinqToObjectiveCの中身を覗く Objective-CのNSArrayやNSDictionaryでwhereやselectなんかを使えるようにするカテゴリがあるという話をしました。 ActiveRecordのようなselectやwhereをObjective-Cで使う - PILOG 記事を書いたあと中身を覗いてみたのですが…
RailsのActiveRecordやC#のLINQではデータ列に対して選択や絞り込みなどを行う際、SelectやWhereなどを用いて要素を絞りこんだり要素のプロパティの集合を取り出したりすることができます。言い換えるとある集合に対する操作の結果として別の集合(または値…
こういうスライドとか やはりお前らのiOS7対応は間違っている さらには解説記事とか やはりお前らのiOS7対応は間違っている(解説編) - Qiita 読んでもやっぱりうまくいかなくてコードで調整しちゃうときあるよね。 でもCGRectの更新って本質的にめんどくさい…
Objective-Cのmwaterfall/MWFeedParserというRSSフィード解析ライブラリを使っていて不便だったことに、本文中の画像URLを得る方法がないというものがありました。幸いHTMLタグ付きの本文を持っていたのでその中からimgタグをもってきてやろうということでイ…
非同期でネットワークからデータを取ってくる系の処理が終わったときにUITableViewのreloadDataを呼びたいみたいなとき。どうやってやるのがいいんでしょうか? delegate observerパターン KVO ReactiveCocoa 自前でなんか作ったやつ iOSでよくあるのはdeleg…
NSLogデバッグの良し悪しは置いておくとして、CGRectとかNSDictionaryとかの値をちょっと確認するのにNSLog使ったりしますよね。CGRectの値を確認するときに一生懸命NSLog("%f", rect.size.width)みたいにやってたりマクロ書いたりしていたんですが、もっと…
使う機会が少なくていつも忘れてしまうし、どの書き方がいいのかよくわからなかったのでメモしとく! MMDrawerControllerのサンプル見ててみつけました。こんな感じで書けるみたい↓↓ typedef NS_ENUM(NSInteger, MMDrawerAnimationType){ MMDrawerAnimationT…
performSelectorもいいんだけど、メソッドを定義するのが面倒ってことありますよね。そういうときはブロックを遅延実行させれば良いです。 次のコードをカテゴリとして追加してあげて、 こんなふうに使います。 - (void)hoge { [self performBlock:^(){ // d…
何重にも入れ子になったNSDictionaryのデータをチマチマ取り出すのは超絶めんどくさいです。valueForKeyで取り出したNSDictionaryにさらにvalueForKeyして、さらに、、なんてやるともうやってられません。 幸いvalueForKeyPathというメソッドで少し簡単にで…
1 week agoみたいな日付の相対表記をiOSでやりたいので探しました。そしたらCocoaPods対応のライブラリがありました。 kevinlawler/NSDate-TimeAgo これです。カテゴリでNSDateを拡張してくれてあります。 インストール 普通のCocoaPods。 # in Podfile pod …
iOSアプリで日付文字列をNSDateに変換する話です。よく知られているように、NSDateFormatterを使って変換をするのが一般的です。 NSDateFormatter* formatter = [NSDateFormatter new]; formatter.dateFormat = @"yyyy/MM/dd HH:mm:ss"; NSDate* date = [for…
先日書いた「ペア要素をキーにしたNSDictionary」という記事でNSDictionaryのキーにしたPairクラスはNSCopyingプロトコルを実装するように書きました。 このNSCopyingに関してはこれまで詳しいことを知らなかったのでヘッダーやリファレンスで調べてみました…
NSDictionaryで複数要素をキーにしようというお話です。 普通の連想配列はキーとバリューで1つの組み合わせになりますが、片方が◯でもう片方が☆のときはこの値みたいなケースの場合は最初から用意されているデータ型では間に合わないことが多いです。 C++で…
こちらを参考にAVFoundationを使ったカメラを実装したのですが、このやり方だとどうもメモリを圧迫するということがわかりました。 iOSのカメラ機能を使う方法まとめ【13日目】 | Developers.IO カメラ機能を使うビューに移動→戻る、を繰り返すとだんだんと…