まだまだ勉強不足で、UIViewとCALayerの兼ね合いが曖昧なのでメモ。 最初、UIViewとCALayerは独立して存在しているのかと思っていたのだけど、どうやら階層構造はUIView、CALayerともに同じになる? (あるいはaddSubview:を実行した時点で、そのUIViewのCALayerを追加してるのかも。まだリファレンスしっかり追えてません) とりあえず動作を確認するために簡単にコードを書いてみた。 // Viewの重なりテスト self.view.backgroundColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:0.5]; UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 160, 200)]; view1.backgroundCo
他人から引き継いだプロジェクトの大まかな全体設計を把握したい場合、規模の大きいライブラリの一部だけ取り出して使用したい場合、複雑になってしまったコードをリファクタリングしたい場合等、プロジェクト内のクラスの依存関係が一望できると有益な場面は多いのではないでしょうか。 objc_depというスクリプトを用いると、下記のように、Xcodeプロジェクト内のクラスの依存関係を示す図をコマンド一発で生成することができます。 このスクリプトの使い方、生成される図の見方等を紹介します。 スクリプトの実行方法 次のURLからダウンロードしてきて解凍すると、objc_dep.py というファイルが入っています。 https://github.com/nst/objc_dep そのスクリプトを適当な場所に置き、ターミナルから次のように実行します。 というコマンドになります。 依存関係図を表示 出力される.do
先日の続き。 iphoneアプリでデータの永続化にCoreDataの使用について、整理3回目。 今回は、リレーションをつけた場合の下位のエンティティの扱い。 今回の具体例では、Categoryに属する、Topic(記事)の表示、追加。 追加、削除のためのManagedObjectクラスを定義 リレーションの上位のEntityに対する、ManagedObjectクラス(NSManagedObjectから派生)を追加、追加と削除のメソッドを作成。上位から下位のEntityの関連を登録することができるようになります。ですが、この追加、削除のメソッドは実装を行わなくても、CoreDataGeneratedAccessorsというカテゴリーでインターフェイスだけを宣言しておければ、実装は不要です(動的に生成されます。) カテゴリーなしのインターフェイスは、Entityの属性値にアクセスするためのPr
has anyone with the iOS 9 beta 1 had this issue? I use standard NSURLConnection to connect to a webservice and as soon as a call is made to the webservice i get the below error. This is currently working in iOS 8.3 Possible beta bug? any ideas or thoughts would be great ! I know its very early in iOS 9 development Here is the full error: CFNetwork SSLHandshake failed (-9824) NSURLSession/NSURLConn
↓ 例えばこんなふうに UIImageView に 'Aspect Fit' を指定して表示させたときの領域を知りたいことってありますよね。 がんばって計算してもいいのですが、AVFoundation.framework の次の関数で簡単に取得できます。 CGRect AVMakeRectWithAspectRatioInsideRect(CGSize aspectRatio, CGRect boundingRect); ドキュメントによると、ムービーを CALayer に表示するときに領域にフィットさせるのに便利ということですが、画像に使っても便利です。 上記の画像だと UIImageView の大きさは 280x508 で、画像のサイズは 2047x1199 です。 そこで下記のコードを実行すると返ってくる CGRect は {{0, 171.997}, {280, 164.006}}
はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28
iOS7ではスタースバーは透明、ナビゲーションバー、タブバー、ツールバー、検索バー、スコープバーは半透明。一般的なルールとしてコンテンツの上にこれらのバーを被せることを想定しスタースバーの下に何もバーがないならコンテンツはフルスクリーンコンテンツにすべき。とある。 iOS7 フレームワーク判定 iOS 7 UI Transition Guideにはこんなやり方が書いてある。場合によってはバージョンよりもNSFoundationVersionNumberを使うほうが意図が明確になる。 if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) { // Load resources for iOS 6.1 or earlier } else { // Load resources for iOS 7 o
Swift2の発表で活気付く中、Objective-Cもひっそり進化しています。 iOSアプリは何個か作ってきたけど、急にSwiftに移行するのは……という方! Xcode7で使えるようになったモダンな文法をちょっとだけ採用してみませんか? きっと手元のコードが美しく、保守しやすくなりますよ! 新しく使えるようになった文法 新しく使えるようになった……と、いっても2つだけです(´・ω・`) Generics Nullability Annotation Generics (1) ArrayやDictionaryに追加するオブジェクトの制限 特定クラスのインスタンスだけをArrayやDictionaryに追加したいケースで有益です。 今までのObjective-Cでは、こんなコードを書いてインスタンスの型チェックを行う必要がありました。 if ([[hoge class] isSubcla
単一のStoryboardでうまく画面遷移を表現できない Storyboardを使ってアプリを作成していると、画面遷移の定義が楽な反面、巨大なStoryboardが生まれてしまったり、うまくSegueで表現できずに同じような画面遷移を2度定義してしまったりすることがあります。このため、Storyboardの使用をあきらめようとする事もあるかと思いますが、Storyboardを分割するとうまい具合に実装できることもあります。 そこで今回は、複数のStoryboardを利用して画面遷移を作成する方法をご紹介したいと思います。 開発環境 今回の開発環境は下記の通りです。 OSX 10.8 Xcode 4.6.1 iOS SDK 6.1 ソースコードはGitHubで公開しています。 共通の画面遷移を別のStoryboardに切り出す 共通の画面遷移部分を再利用したい NavigationContr
Xcode 4.4 から Objective-C が書きやすくなりました、という今更のいまさらな話ですが、ネット上に転がっている少し前のサンプルソースなどは古い書き方のものもあるようなので、今回はよく使う NSArray と NSDictionary と NSNumber の書き方についてだけ備忘録として残しておこうと思います。 NSArray インスタンスの生成 // 古い書き方 NSArray *oldArr = [NSArray arrayWithObjects:@"value1", @"value2", @"value3", nil]; NSMutableArray *oldMutableArr = [NSMutableArray arrayWithObjects:@"value4", @"value5", @"value6", nil]; // 新しい書き方 NSArray *n
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く