読者です 読者をやめる 読者になる 読者になる

ios

テキストの一部をハイパーリンク化する

環境: Swift3 iOS10 UILabel ではなく UITextView の attributedText に NSLinkAttributeName をセットすることで簡単にできた。 クリック時にデフォルトでは Safari が起動して設定したURLのページが表示された。 クリック時の挙動を変更したい場合は UITex…

URL Scheme の追加と Configuration によって変更する方法

環境: Xcode8.3.2 Swift3 URL Scheme の追加 Target -> Info -> URL Types から URL Scheme を追加する。 まだ何も追加していない状態。 +ボタンを押して以下を追加した。 identifier: com.example.myapp URL Schemes: myapp Info.plist に URL Types の項…

View の Auto Layout によるアニメーションを無効にする

環境: Swift3 あるViewのSubviewのレイアウトをAuto Layoutで行った時にアニメーションしながら配置された。 この時のアニメーションは不要なので無効にする。 やり方はSubviewの配置が行われるlayoutSubviewsメソッドをオーバーライドして以下のようにアニ…

角丸なUIViewに角丸な影をつける

環境: Swift3 角丸なUIViewに角丸なドロップシャドウをつけるやり方。 プレイグラウンドで確認。 import UIKit import PlaygroundSupport let baseView = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 200)) baseView.backgroundColor = UIColor(r…

CGPath の変化をアニメーションさせるサンプル

環境: Xcode8.2.1, Swift3 CGPath の変化をアニメーションさせる方法を試した。 気をつける点としては変更前と変更後のパスの数を同じにしておくこと。 import UIKit import PlaygroundSupport class SquareButton: UIControl { let pathLayer = CAShapeLaye…

UIScrollView で現在のページ数を取得する

環境: Xcode8.2.1, Swift3 UIScrollViewのisPagingEnabledプロパティを true にすると、ページ単位のスクロールが可能になる。 このときに現在のページ数を求める方法についてメモ。 ページングは横スクロールの場合なら UIScrollView のcontentOffset.xがUI…

UIScrollView の keyboardDismissMode を設定してドラッグ時に自動でキーボードを閉じる

環境: Xcode8.2.1, Swift3 UIScrollView 上に UITextField / UITextView を乗せている場合はkeyboardDismissModeプロパティを設定することで自動でキーボードを閉じることができる。 Storyboardの場合 コードの場合 // デフォルト設定。UIScrollView をドラ…

UIScrollViewDelegate について

環境: Xcode8.2.1, Swift3 UIScrollView のドラッグによるスクロール時に呼ばれる UIScrollViewDelegate の順番 // MARK: - UIScrollViewDelegate // any offset changes // スクロール中は常に呼ばれる func scrollViewDidScroll(_ scrollView: UIScrollVie…

UIScrollView の Bounce 設定について

環境: Xcode8.2.1, Swift3 UIScrollView の Bounce 設定のパラメータが3つあるが、これらの違いについて調べた。 Storyboard 以下がデフォルトの設定 コード // UIScrollView // default YES. if YES, bounces past edge of content and back again open va…

Storyboard 上で UIScrollView を AutoLayout を使って設定する

環境: Xcode8.2.1, Swift3 Storyboard 上で UIScrollView を AutoLayout を使って設定する方法について。 ちょっとハマったのでメモ。 ビューの階層構造は UIViewController.view -> UIScrollView -> UIView とする。 UIScrollView の制約 UIScrollView の制…

UICollectionViewで縦横両方向にスクロールさせる

環境: Swift3 コレクションビューで縦横どちらにもスクロールさせることはできるか調べてみた。 どうやら基本的には縦横どちらかの方向にしかスクロールできないようだ。 コレクションビューではUICollectionViewLayoutを継承したクラスでレイアウトを管理す…

SwiftでON・OFFの切り替えをする円形ボタンを作る

環境: Swift3 こんな感じの円形ボタンのカスタムビューを作る。 ボタンというよりUISwitch的なON・OFFの状態切り替えをさせたい。 UIControlを継承して、状態はisSelectedプロパティで保持している。 import UIKit import PlaygroundSupport final class Cir…

Storyboardを使ってUITableViewを組み立てる場合のテンプレート(Swift3)

環境: Swift3 よく使うのでコピペ用にメモしておく。 ViewController import UIKit class ViewController: UIViewController { var items: [String] = ["foo", "bar", "hoge"] @IBOutlet weak var tableView: UITableView? override func viewDidLoad() { su…

Fastlaneでplistを更新する

fastlane: 2.3.0 Fastlaneでplistを更新する方法を調べたのでメモ。 update_info_plistというアクションを使う。 fastlane/update_info_plist.rb at master · fastlane/fastlane · GitHub app_identifierとdisplay_nameについてはアクションのパラメータに直…

XcodeをAppStoreを使わずインストールしたときのメモ

Appleアカウントでログインし、以下からダウンロードする。 https://developer.apple.com/download/more/ xip ファイルを選択する。 リリース直後だとかなり時間がかかる。 Chrome でダウンロードし、展開しようとしたところ 「アーカイブ”Xcode_8.2.xip”は…

UIWebViewのリクエストにUserAgentを設定する

環境: Swift3 UIWebViewのリクエストにUserAgentを設定するには、リクエスト前にUserDefaultsのregisterメソッドでキー名UserAgentで値をセットする必要がある。 UserDefaults.standard.register(defaults: ["UserAgent" : "hoge"]) この時、 // これだと設…

UserDefaultsのregisterDefaultsメソッドについて

環境: Swift3 UserDefaultsのregisterDefaultsメソッドについて勘違いしていたのでメモ。 // Swift3 で registerDefaults() から register(defaults: ) に変更になった open func register(defaults registrationDictionary: [String : Any]) このregisterメ…

UserDefaults に保存されているデータをすべて表示する

環境:Swift3 UserDefaults に保存されているデータをすべて表示する for (key, value) in UserDefaults.standard.dictionaryRepresentation().sorted(by: { $0.0 < $1.0 }) { print("- \(key) => \(value)") } または if let appDomain = Bundle.main.bundle…

プッシュ通知受信時に呼ばれるメソッドについて

環境: Swift2.3 前提となるCapabilitiesの設定 - Push Notifications -> ON - Background Modes -> OFF プッシュ通知受信時に呼ばれるメソッド プッシュ通知受信時に呼び出されるメソッドに 1. application:didReceiveRemoteNotification:と 2. application:…

iPhoneのHTTPプロキシを設定してもオフになってしまう件

ios

環境:iOS10.1 新しいiPhoneを購入後、WifiのHTTPプロキシ設定を「手動」で行うとしたところ、入力しても保存されず、なぜかオフになってしまう現象が起きた。 どうやら前のiPhoneのバックアップから復元した場合に発生するようだ。 「このネットワーク設定を…

iPhoneのUDIDを調べる方法

Xcode(8.0) で調べる Window -> Devices からiPhoneデバイスを選択、identifierの部分が UDIDになる。 iTunes で調べる 初期表示はシリアル番号となっているがその辺りをクリックすると表示項目が切り替わり、UDIDが現れる。 シリアル番号 -> UDID -> ECID -…

いつも設定するAppearanceのメモ

環境: Swift2.2 iOS8以降対象 いつも設定している Appearance のコピペ用メモ。 以下を AppDelegate で呼ぶ。 mainColor は extension で独自に設定したもの。 private func setupAppearance() { // アプリケーション全体のtintColor設定 self.window?.tintC…

LaunchScreen.storyboard に貼り付けた画像が表示されない

シミュレータでは表示されるが、実機だと表示されない。 バグらしい、とりあえず自分の場合は iPhone 側の再起動で表示されるようになった。 Launch Storyboard not showing image when projec... | Apple Developer Forums https://forums.developer.apple.…

SwiftでDEBUG Macroを使う

環境: swift2.2 Xcode7.3.1 Swiftで以下のようなDEBUG Macroを使いたい。 #if DEBUG print("DEBUG") #elseif STAGING print("STAGING") #else print("ELSE") #endif Objective-C の場合はPreprocessor Macrosに設定していたが Swift ではOther Swift Flagsの…

SwiftでオブジェクトをNSUserDefaultsに保存する

環境:swift2.1 NSUserDefaultsにオブジェクトのまま保存したかったが、保存できるオブジェクトはNSArray, NSDictionary, NSString, NSNumber, NSDate ,NSDataに限られていた。 調べたところ、オブジェクトをNSDataに変換できることがわかった。 NSDataにで…

UIImage と UILabel を合成する

ios

環境:Swift2.1 UIImage と UILabel を合成する方法について。 UIImage をセットした UIImageView を作成、そしてそれに UILabel を addSubview する。 UIImageView(UIView) が持つ CALayer プロパティのrenderInContextメソッドでグラフィックコンテキスト…

単色で塗りつぶした UIImage を生成する

ios

環境: Swift2.1 指定した UIColor の単色で塗りつぶした UIImage を生成したい。 UIImage の extension として実装した。 import UIKit extension UIImage { static func image(color color: UIColor, size: CGSize) -> UIImage { UIGraphicsBeginImageConte…

UIView が持つ描画・レイアウト更新系のメソッドメモ

ios

setNeedsLayout() 現在の子Viewの配置を無効にし、次の更新サイクルで配置し直すようにする(メインスレッドから呼ぶこと)。 このメソッドは即時の更新を強制するものではなく、次の更新サイクルを待つので、更新要求を書き留めたらすぐに処理を戻す。 これを…

UIImage と NSData の相互変換

ios

環境: Swift2.0 UIImage -> NSData UIImagePNGRepresentation関数、またはUIImageJPEGRepresentation関数を使う。 関数定義 // return image as PNG. May return nil if image has no CGImageRef or invalid bitmap format public func UIImagePNGRepresenta…

同じiOSバージョンのシミュレータが重複して表示されてしまう場合の解決方法

ios

環境: Xcode7.0.1 Beta 版と GM をインストールしたら重複して表示されるようになってしまった。 iOSシミュレータを削除するには Xcode > Window > Devicesから削除できる。 削除したいデバイスがたくさんあって個別に面倒な場合は ~/Library/Developer/Core…

iOS シミュレータ・アプリのディレクトリの場所

ios

環境: Xcode7.1 アプリデータのディレクトリを調べる 例えば iOSシミュレータにインストールした、あるアプリのDocumentsディレクトリは以下のようになる。 ~/Library/Developer/CoreSimulator/Devices/CC8FA744-B3C2-4689-839F-33B504F6168A/data/Container…

iOS でファイル保存、読み込み

ios

環境: Swift2.0 アプリ内にデータを保存する場合、どこに保存するのかを調べた。 だいたい以下のディレクトリ(またはこれらの中に作成したサブディレクトリ)のどれかに保存することになるようだ。 Documents/ Library/ Library/Application Support/ Library…

Carthage を使ってライブラリを管理する

ios

環境: Xcode 7.0.1 Swift2.0 Carthage(カーセージって読むみたい)というライブラリ管理ツールを使ってみた。 CocoaPods と比べると ・CocoaPods では Static Library のlibPods.aを静的リンクしていたが 、Carthage はxcodebuildコマンドを使ってビルドし…

iOS9対応メモ

環境: Xcode7 GM iOS9 対応で行った作業メモ。 App Transport Security(ATS)対応 HTTPS 接続にする必要あり。今回はとりあえずHTTPを許可するようにInfo.plistに以下の手順で追加する。 NSAppTransportSecurityを Dictionary で追加。 その下でNSAllowsArbit…

よく使う Xcode のショートカットメモ

developer.apple.com Cmd + Ctrl + 左 or 右 超使う。ソースコード上の定義にジャンプしたり、戻ったり。 トラックパッドの左右スワイプでも同様なことができるがデカいファイル上で行うと固まったりするので、上のコマンドでやるほうがよい。 Cmd + b ビル…

Xcode の Localization でハマったのでメモ

環境: Xcode 6.1 iOS 8.1 Simulator 結論から言うと Xcode 6.1 と iOS 8.1 Simulator の環境で、 iOS Simulator の言語設定に対応したローカライズファイルLocalizable.stringsを用意しても反映されないバグがあるらしい。 ワークアラウンドとして iOS Simu…

NSUserDefaults を使ってアプリの初回起動判定を行う

環境:iOS Deployment Target 7.1 アプリの初回起動判定は NSUserDefaults でやるのがよいらしい。 以下のように NSUserDefaults を使って初回判定を行うメソッドを作った。 - (BOOL)isFirstRun { NSUserDefaults *userDefaults = [NSUserDefaults standardU…

UITextField の inputView に UIPickerView を設定する

環境:iOS Deployment Target 7.1 以前、UIPickerView をキーボードのように表示・非表示させるというエントリーを書いたがもっと簡単なやり方を知ったのでメモしておく。 まず、以前のやり方は完了ボタンとそれを置くビューを自分で作って、UIPickerView と…

画面の向きを固定して回転を禁止する

環境:Xcode6 画面の向きを固定して回転しないようにする。 Xcode の プロジェクト -> Targets -> General > Deployment info > Device Orientation で設定する。 Device Orientation 説明 Portrait 縦画面、ホームボタン下 Upside Down 縦画面、ホームボタ…

UITextField, UITextView がキーボードで隠れないようにする

環境:iOS Deployment Target 7.1 UITextField、UITextView は入力フィールドにフォーカスが当たると画面下からキーボードが現れるが、この時に入力フィールドが画面下側にある場合にキーボードの裏に隠れてしまう問題がある。 やりたいこと 1画面に複数の U…

UITableView の`scrollToRowAtIndexPath:atScrollPosition:animated:`でエラー

環境:iOS Deployment Target 7.1 UITableView でスクロール位置を画面上部に戻そうとしてscrollToRowAtIndexPath:atScrollPosition:animated:メソッドを使っていたのだが、レコード0件時にエラーが発生した。 コード NSIndexPath *indexPath = [NSIndexPath…

UIPickerView をキーボードのように表示・非表示させる

環境:iOS Deployment Target 7.1 やりたいこと: ボタンタップ時にキーボードが下からシュッと出てくるようにピッカーを表示させたい。 完了ボタンのタップで決定、ピッカー以外の部分をタップした時にはピッカーを隠す。 こんなかんじ。 やってること ピッ…

スクロール画面で固定されたビューを実現するには

環境:iOS Deployment Target 7.1 スクロールする画面上でも固定されてスクロールしない View を実装する方法。 UIScrollViewDelegate プロトコルを実装して、スクロールする度に呼ばれるscrollViewDidScroll:で scrollView.contentOffset プロパティの座標…

UIViewController で UITableView を実装する

環境:iOS Deployment Target 7.1 UITableViewController を使わず、UIViewController で UITableView を実装する方法について。 ヘッダファイルに UITableViewDelegate、UITableViewDataSource プロトコルを追加 UITableView オブジェクトを作成してdelegat…

UIScrollView を使って画面をスクロールできるようにする

コードで作成する時の話。 ポイントは UIScrollView オブジェクト作成時にinitWithFrameで指定した矩形のサイズより大きめなサイズをcontentSizeプロパティに設定すること。 - (void)viewDidLoad { [super viewDidLoad]; UIScrollView *scrollView = [[UIScr…

UIView の背景色をグラデーションにする

環境:iOS 7.1 UIView がコンポジションしている CALayer に以下のように設定すればOK。 CALayer でエラーになる場合はQuartzCore.frameworkを追加する。 Objective-C - (void)viewDidLoad { [super viewDidLoad]; CAGradientLayer *gLayer = [CAGradientLay…

UITableViewCell の高さを文字列の長さに応じて動的に変更する

環境:iOS SDK 7.1 UITableView の セル毎に呼ばれる Delegate メソッドのtableView:heightForRowAtIndexPath:の戻り値でセルの高さが決まる。 この時にそのセルに入れる文字列から高さを動的に変更する必要がある。 で、どうやるかというと NSString のboun…

ステータスバーの高さ、ナビゲーションバーの高さを取得する

ステータスバーの高さを取得する Objective-C float statusHeight = [[UIApplication sharedApplication] statusBarFrame].size.height; ナビゲーションバーの高さを取得する float navigationBarHeight = self.navigationController.navigationBar.frame.si…

画面遷移のメモ

環境:iOS SDK 7.1 UINavigationController での画面遷移 AppDelegate から初期画面のコントローラに遷移する 初期画面となる UIViewController を作成、それを使って UINavigationController を作成する。 そして UIWindow のrootViewControllerプロパティ…

UITextView で Placeholder を使う

環境:iOS SDK 7.1 UITextField には Placeholder が用意されているけど、UITextView にはないみたい。 以下の stackoverflow にそのものズバリな回答があったのでこれをそのまま使った。 ios - Placeholder in UITextView - Stack Overflow http://stackove…