ObjecTips

Swift & Objective-C で iOS とか macOS とか

2015-06-01から1ヶ月間の記事一覧

UITableViewCell で Auto Layout + UITextView を使う際の Tips

iOS 8の self-sizing cell で自動で高さを調整してくれるように実装したところちょっと問題が。 まずセルのレイアウトは以下 上に UILabel, 下に UITextView を配置してラベルとテキストビューの間は0px ラベルとテキストビューそれぞれのセルの contentView…

UITableViewCell のメニューの表示位置をカスタマイズする

まず UITableView のセルのメニュー表示の実装方法はこちら UITableView のセル選択時にメニューを表示する - ObjecTips 前回の方法では UITableViewDelegate を使ってメニュー表示をする時と同じ標準的な位置にメニューが表示される。 セルへのメニューの表…

UITableViewCell 選択時にメニューを表示する

前回は UITableViewDelegate を使って簡単にメニュー表示をする方法について書いた。 UITableView のセルの Copy Paste メニューを表示する - ObjecTips この方法はセルを長押しした時にメニューを表示する事ができるが、セルをタップして選択したらすぐにメ…

UITableViewCell で Copy Paste メニューを表示する

UITableView にはセルの Copy Paste メニューを簡単に実装できる delegate メソッドが用意されている。 // Copy/Paste. All three methods must be implemented by the delegate. - (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPa…

デフォルトの EKCalendar について

デフォルトの EKSource iOS にはデフォルトで2つのデフォルトのソース EKSource が用意されている。 1つはローカルのカレンダー(iCloud同期を設定しない場合)。 もう1つは EventKit からはアクセスできない誕生日用のカレンダー。 このあたりの詳しい話は…

float 等の浮動小数点数の誤差を考慮して等価比較する

よく定数を忘れるので備忘 float の誤差を考慮して等価比較するには FLT_EPSILON を使う double のための DBL_EPSILON long double のための LDBL_EPSILON も用意されている。 例えば float a が float b とイコールであるかをチェックするには a と b との…

Photos.framework でスクリーンショット画像の一覧を取得する

iOS 9 β2で PHAssetMediaSubtypePhotoScreenshot NS_AVAILABLE_IOS(9_0) = (1UL << 2) が追加された。 これを使えば写真ライブラリからスクリーンショット画像のみを取得したり、逆にスクリーンショットを排除した画像一覧を取得する事ができる。 コードは以…

NSUserDefaults の変更通知を受け取る

NSUserDefaults には NSUserDefaultsDidChangeNotification という通知が用意されていて変更通知を受け取る事ができる。 この通知は userInfo が nil になっていて、何が変更されたのか変更の詳細を知る事ができない。 NSUserDefaults の何のキーが変更され…

iOS 8リマインダーアプリの挙動調査 その2

前回の内容は以下 iOS 8リマインダーアプリの挙動調査 - ObjecTips 優先順位の !!! は UITextView の中に含まれている事が分かった。 これをコピーすると何が入っているのか。 UIPasteboard を使って中身を見てみた。 すると pasteboardTypes には ( "com.ap…

iOS 8リマインダーアプリの挙動調査

リマインダーアプリの優先順位の表示を参考にするため、どのように実装されているのか調べてみた。 優先順位の !!! の部分は attributedString もしくは attachment の画像として UITextView の中に一緒に入れられているっぽい。 しかしテキスト編集時にこの…

dispatch_block_t

dispatch/object.h に以下のような定義がある。 typedef void (^dispatch_block_t)(void); 自前の実装の中で - (void)test { void (^blockName)(void) = ^{ }; } @interface MyObject : NSObject @property (nonatomic, copy) void (^blockName)(void); @end…

ARC で retain count を調べる

ARC環境では retain count を取得する retainCountメソッドと手動で retain release を行う retain release メソッドが使えなくなった。 でもいつどこでオブジェクトが保持され解放されているかオブジェクトの retain count を調査したい時がある。 そういう…

iOS 8.3 to iOS 9.0 API Differences CoreTelephony

まだWWDCのネットワーク系のビデオを見ていないので紹介されているか分からないけど、たぶんされていないであろう CoreTelephony の変更点について。 関連記事は以下 iOS 8.3 to iOS 9.0 API Differences Core Image - ObjecTips iOS 8.3 to iOS 9.0 API Dif…

iOS 8.3 to iOS 9.0 API Differences CoreLocation

iOS 9 での CoreLocation の変更点 関連記事は以下 iOS 8.3 to iOS 9.0 API Differences Core Image - ObjecTips iOS 8.3 to iOS 9.0 API Differences オーディオ周り - ObjecTips iOS 8.3 to iOS 9.0 API Differences ネットワークとWeb周り - ObjecTips iO…

UITableViewCell を左スワイプしてボタンを表示するUI

UITableViewCell を左スワイプした時に表示されるボタンは iOS 7 までは削除ボタンのみに固定されていた。 削除ボタンのタイトルはデリゲートメソッド - (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath…

テスト時のログを見やすくする

前回 XCTest の name プロパティを使ってテスト時のログを見やすくする方法について書いた。 XCTest の name プロパティの活用 - ObjecTips その時は XCTest の name プロパティがあるのを知って「これを使えばログを見やすくできるんじゃないか?」という思…

XCTest の name プロパティの活用

XCText.framework でテストを書く時テストケースのクラス階層は MyTests: XCTestCase : XCTest となっていて XCTest には name というプロパティがある。 このプロパティで、今どのクラスのどのテストケース(テストメソッド)が実行されているかを知る事が…

Inter-device Audio Mode

Keynote その他で全然触れられてなかった Inter-device Audio Mode (IDAM) というおもしろい機能が WWDC2015 Session 507 What's New in Core Audio で紹介されていた。 https://developer.apple.com/videos/wwdc/2015/?id=507 この機能は iOSデバイスをUSB…

WebView の UserAgent を取得設定する iOS 9対応

UserAgent の取得 UIWebView では stringByEvaluatingJavaScriptFromString: メソッドで JavaScript を実行して UserAgent を取得できる。 iOS 8以降の WKWebView では evaluateJavaScript:completionHandler: メソッドで JavaScript を実行して UserAgent …

iOS 8.3 to iOS 9.0 API Differences ネットワークとWeb周り

結構 diffs の量が多いので分割分割で今回はネットワークとWeb周りについて。 関連記事は以下 iOS 8.3 to iOS 9.0 API Differences Core Image - ObjecTips iOS 8.3 to iOS 9.0 API Differences オーディオ周り - ObjecTips iOS 8.3 to iOS 9.0 API Differen…

iOS 8.3 to iOS 9.0 API Differences オーディオ周り

オーディオ周りの変更点のまとめ。いい感じに進化していってる。 関連記事は以下 iOS 8.3 to iOS 9.0 API Differences Core Image - ObjecTips iOS 8.3 to iOS 9.0 API Differences オーディオ周り - ObjecTips iOS 8.3 to iOS 9.0 API Differences ネットワ…

iOS 8.3 to iOS 9.0 API Differences Core Image

画像周りの変更点をまとめようと思ったら Core Image だけで済んでしまったので Core Image だけ。 関連記事は以下 iOS 8.3 to iOS 9.0 API Differences Core Image - ObjecTips iOS 8.3 to iOS 9.0 API Differences オーディオ周り - ObjecTips iOS 8.3 to …

デフォルトの EKSource について その2

前回の記事で、デフォルトでは2つの EKSource が存在する事について書いた。 デフォルトの EKSource について - ObjecTips iCloud のアカウントを設定するとさらに EKSourceTypeCalDAV EKSourceTypeSubscribed の2つのソースが追加される。 一覧は以下 title…

EKStructuredLocation の Private なプロパティ

EKStructuredLocation の公開ヘッダでは @property(nonatomic, retain) NSString *title; @property(nonatomic, retain) CLLocation *geoLocation; @property(nonatomic) double radius; // 0 = use default, unit is meters の3つのプロパティが定義されて…

Framework名とクラスヘッダファイル名のイレギュラー

XCTest.framework において XCTest クラスを定義しているヘッダファイルはちょっとイレギュラーな形になっている。 通常 XXAbc というクラス名であれば XXAbc.h というヘッダファイルで定義されるが XCTest の場合は XCAbstractTest.h というヘッダファイル…

リマインダーの優先順位 その2

少し前にリマインダーの priority プロパティについて書いた。 リマインダーの優先順位 - ObjecTips その後いろいろと調べていて OS X の方の EventKit/EKTypes.h を見ていたら以下のように priority の定数がしっかりと定義されていた。 typedef enum : NSU…

ウェブブラウザでの位置情報に基づくアプリのURL

たまたまウェブサーフィンをしていたら iTunes でのアプリの URL が従来のものから変わっているものを発見した。 例えば Apple のリリースしている iBooks の場合以下のようになる。 USページ https://itunes.apple.com/us/app/ibooks/id364709193?mt=8 JPペ…

アプリ全体を Dynamic Type に対応させる

アプリを Dynamic Type に対応させようと思って実装してみた。 IBでフォント指定可能なUI まずIB上で設置できるUIをいくつか配置する。 UILabel UIButton UITextField UITextView はIB上でフォントの設定ができるので Dynamic Type に対応したフォントを設定…

デフォルトの EKSource について

EKSource 上記コードでカレンダーへのプライバシーアクセスとリマインダーへのプライバシーアクセスを表示して全ての EKSource の配列を取得できる。 このソースは iCloud や CalDav を設定する事で増減するが、デフォルトでは2つのソースが用意されている。…

位置情報に基づくリマインダーの通知が利用できないデバイス

参考 iPhone および iPad でリマインダーを作成および使用する - Apple サポート 当然と言えば当然かも知れないけど、iPod touch と iPad Wi-Fi モデルでは利用できない。 リマインダー.appでのリマインダー詳細画面では「指定場所で通知」の項目自体が非表…