サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
会話術
tomoyaonishi.hatenablog.jp
Swiftでプライベートで開発中のアプリでこんな出来事に遭遇しました。 let array = ["1", "2", "3", "4"] NSUserDefaults.standardUserDefaults().setObject(array, forKey: "key") NSUserDefaults.standardUserDefaults().synchronize() let array = NSUserDefaults.standardUserDefaults().arrayForKey("key") as? [String] println(array) // nil NSUserDefaultsに配列が保存できないという罠にハマりました。 原因究明まで結構時間がかかりましたが、結論としては保存する配列を as NSArrayとすることです。 コードでは以下のようになります。
あけましておめでとうございます。 仕事でAutoLayoutでUIを作っていてなんとなく-[UIView addConstraint], -[UIView addConstraints], -[UIView removeConstraint], -[UIView removeConstraints]の定義を見たところ、deprecatedになっていました。正式なdeprecatedではなく // This method will be deprecated in a future release and should be avoided. とコメントに書いてありました。今まではNSLayoutConstraintで制約を作って対象のUIViewのaddConstraint, addConstraintsを呼んでいたわけですが、それが非推奨になっています。 -[UIView addCons
Objective-Cではxibで作成したカスタムビューのインスタンスを以下のように生成して利用していました。 しかし、Swiftではinitのなかでselfに代入することはできないようです。(もし出来るならやり方教えてください。) なので以下のような書き方でxibからロードしたインスタンスを返すことはできないようです。 let view = CustomView() 回避策としてジェネリクスを使ってどんなカスタムビューのインスタンスでも返すことができる関数を作ってみました。 func InstantiateCustomView<T: UIView>(classToCreate: AnyClass) -> T { let view = UINib(nibName: NSStringFromClass(classToCreate), bundle: nil).instantiateWithO
Swiftを使って開発していても、OSSなどはObjective-Cで書かれたものを使うことはよくあります。 SwiftからObjective-Cのクラスなどを使うにはヘッダーファイルを用意するだけですが、Objective-C側に書かれたenumの扱いには注意が必要です。 結論から言うと、Objective-C側のenumの定義には NS_ENUM NS_OPTIONS のマクロを使って定義するようにしてください。 typedef enum での定義ではSwift側で扱えません。 ビット演算でのオプションの定義などはNS_OPTIONSマクロを使わないと、 swift側で | & などのビット演算子での処理ができません。(エラーになってしまいます。) もしObjective-Cの定数をSwiftで使っていてエラーが出るときは、enumの定義の仕方を調べてみましょう! マクロの使い方につい
注意事項というかObjective-CのenumをSwiftはどう解釈するかのメモ ObjC側でのenum typedef enum : NSUInteger { MyEnumValueA, MyEnumValueB, MyEnumValueC, } MyEnumValue; があったとする。この定数をSwift側からさわろうとするとほとんどの場合でエラーになります。 SwiftはNS_ENUMあるいはNS_OPTIONSで定義されたCスタイルのenumのみを自動でSwiftでのenumに変換します。 NS_ENUM, NS_OPTIONSでenumを定義するように変更する。 NS_ENUM (NSUInteger, MyEnumValue) { MyEnumValueA, MyEnumValueB, MyEnumValueC, }; そうするとSwift側で enum MyEnumVal
AutoLayoutを使ってセル上を左にスワイプすると、セルの右側がオープンするUITableViewCellを実装してみます。セルの削除のときによく出てくるあれを自分で実装する感じです。 AutoLayoutやstoryboardにある程度知識がある方を前提としていますので、適宜不足している情報は補って実装してみてください>< 準備編 まずは、通常通りにstoryboardでUITableViewを実装します。 次に、スワイプした時にわかるようにセルの背景色を変えておきます。 これで準備完了です。スワイプできるセルを実装していきます。 TableViewを貼り付けているViewControllerは以下のようになっています。普通です。 import UIKit class ViewController: UIViewController, UITableViewDataSource {
UITableViewCellのUITableViewAutomaticDimensionを使えば、セルのそれぞれの高さを自動で計算させることができます。 optional func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat こいつとはおさらばです。 以下実装方法です。 まず通常のUITableViewの実装の方法でStoryboardを作っていきます。 カスタムセルに対してUILabelを1つ置きます。ここで以下の画像のようにセル全体にLabelが広がるようにAutoLayoutを設定します。なお、カスタムセルではなくBasicStyleのセルであればここでは何もしなくてもよいです。 次にカスタムセル、BasicStyleのセルであったとしても以
Xcode6で密かにベクター画像が使えるようになっています。 これを使えば@1x, @2x, @3x画像を用意する煩わしさから解放されます! 使い方は非常に簡単です。 PDF画像を@1xのサイズで書きだす。 AssetCatalogをクリックする New Image Setで画像セットを追加する 画像のようにAttributesのTypesをVectorsに変更する 作成したPDF画像を置く。 こうすれば後は今までと同じように画像を扱えます。 注意しなければいけないことは完全なベクター画像の対応というわけではなく、ビルド時に@1x, @2xなどの各PNG画像が書き出されるようです。ソースコード上で拡大や縮小ができるわけではないようです。 デザイナーの負担もエンジニアの負担もすごく軽くなりますね。 WWDC 2014 Session Videos - Apple Developer
AVFoundationによるキャプチャ機能をまとめたいと思います。 まず、普段あまり使うことがないAVFoundationの簡単な紹介です。このフレームワークはAppleが用意する「音声・動画などの時間ベースのメディアの再生や作成、編集の細かい作業を行うための超強力な低レベルObjective-C API」です。 しかし、AVFoundationはおそらくAppleが用意するフレームワークの中でも1,2を争う巨大なフレームワークです。その機能を全て紹介することは難しいため、今回はその中でも音声・画像・動画のキャプチャ機能について実際のコードを絡めて紹介したいと思います。 AVFoundationを利用することでUIImagePickerControllerよりもさらにカスタマイズ可能なカメラやレコーダーを開発することができます。 なお、この記事ではかなり噛み砕いて説明しているため初心者の
このページを最初にブックマークしてみませんか?
『tomoyaonishi.hatenablog.jp』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く