しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

UIViewのdraw(rect:)が呼ばれるタイミングを調べてみる

アプリの高速化のため、UIViewのdraw(rect:)が呼ばれるタイミングを調べてみました。 下のように、普通に画面に貼り付ける時はdraw(rect:)が呼ばれました。 import UIKit class ViewController: UIViewController { let myView = MyView(frame: UIScreen.mai…

【Swift】Youtube動画をアプリ内で再生する

Google提供のyoutube-ios-player-helperを使って、Youtubeの動画をアプリ内で再生してみました。 github.com Googleのドキュメントはこちらです。 https://developers.google.com/youtube/v3/guides/ios_youtube_helper インストール CocoaPodsでインストー…

CoreImageのフィルターを試してみる(CICategoryColorAdjustment、その3)

下記事の続きです。 今回もフィルターを使った画像加工を試してみました。 llcc.hatenablog.com 今回はCICategoryColorAdjustmentのCILinearToSRGBToneCurve以降を見ていきます。 Core Image Filter Reference 実装内容は前回同様、以下のようになります。 i…

ActionSegueの動作を確認する

ActionSegueの動作を確認してみました。 UINavigationControllerにセットされているController まずは、下のようにUINavigationControllerにセットされているControllerからのSegueの挙動を確認してみました。 Show UINavigationControllerのpushメソッドを…

【Swift】TwitterKitでアプリから投稿してみる

iOS11からはSocial.frameworkによるツイートができなくなり、代わりにTwitterKitが推奨されています。 今回はTwitterKitを使って投稿する方法を試してみます。 iOS11でSocial.frameworkを使った時の挙動 下のようにテキストをツイートする実装をしました。 i…

CoreImageのフィルターを試してみる(CICategoryColorAdjustment、その2)

下の続きになります。 llcc.hatenablog.com 今回もCoreImageのフィルターを使って画像加工を実装していきます。 フィルターはCICategoryColorAdjustmentのCIColorPolynomial以降を見ていきます。 https://developer.apple.com/library/content/documentation…

iPhone Xの顔認証の実装について調べてみる

iPhone Xから顔認証が使えるようになるので、実装方法を調べてみました。 実機はないので、ドキュメントを見つつの調査です。 Face ID関連で追加されたAPI ドキュメントを見たところLABiometryTypeというenumが追加されていました。 LABiometryType - LocalA…

【Swift】present時のアニメーションを変更する

下のように、UIViewControllerをpresentした時の挙動を変更してみました。 present(UIViewController(), animated: true, completion: nil) present時のアニメーションですが、デフォルトでは下の4つが用意されています。 public enum UIModalTransitionStyl…

【Swift】App Groupを使ってアプリ間でファイル共有

App Groupという仕組みを使って、アプリ同士のファイル共有を試してみました。 ちなみにApp Groupは自分が開発したアプリ間でないとデータ共有できないので注意が必要です。 下記事ではUserDefaultsの共有を試したので、今回はファイル共有を試してみようと…

【iOS10.3】SKStoreReviewControllerでレビュー依頼

SKStoreReviewControllerを使ったレビュー依頼を試してみました。 SKStoreReviewControllerとは SKStoreReviewControllerとはiOS10.3で登場したレビュー依頼のクラスで、ユーザーが簡単にレビューを行う事ができます。 ユーザーがレビューしやすくなる半面、…

CoreImageのフィルターを試してみる(CICategoryColorAdjustment、その1)

前回に続いて、CoreImageのCICategoryColorAdjustmentフィルターを試してみました。 CoreImageのフィルターを試してみる(CICategoryBlur) - しめ鯖日記 今回も画像はぱくたそ様のものを使わせて頂きました。 画像表示処理は下の通りです。 import UIKit clas…

Git LFSを試してみる

Git LFSというものを試してみました。 環境はMacのOS 10.12.6です。 Git LFSとは Git LFSとはGit Large File Storageの略で、大容量ファイルの扱い用のファイルです。 公式サイトは以下になります。 git-lfs.github.com Git LFSを試してみる brewを使ってlfs…

ウォーキングによる消費カロリーの計算方法

ウォーキングによる消費カロリーの計算方法について調べてみました。 今回は以下の書類を参考にしました。 運動基準・運動指針の改定に関する検討会 報告書 運動による消費カロリーの計算式 消費カロリーは以下の式で表されます。 メッツは運動強度の単位で…

SCLAlertViewでアラート表示をおしゃれにする

SCLAlertViewというライブラリを試してみました。 github.com まずはCocoaPodsでインストールします。 target 'MyApp' do use_frameworks! pod 'SCLAlertView-Objective-C' end 使い方は下の通りです。 showInfoメソッドで、Infoマーク付きのポップアップを5…

なぜIndexPathと配列リテラルは比較できるのか

こちらの記事を読んで、IndexPathをIntの配列リテラルから生成したりIndexPathとInt配列の比較ができる事を知りました。 今回はなぜこのような事ができるかを調べてみました。 [iOS][Swift] IndexPathはInt配列リテラルから作れる。Int配列リテラルとの比較…

iOS11からWebViewのスクロール減速スピードが変わった気がするので調査

iOS11ではWebViewのスクロールがスムーズになった気がするので調査してみました。 調査対象はWKWebViewとUIWebViewです。 各OSで、スクロールの減速スピードを表すdecelerationRateの値を比較してみました。 この値が小さいほど、スクロールが早く停止します…

CoreImageのフィルターを試してみる(CICategoryBlur)

CoreImageを使うと、簡単に画像にフィルターをかける事ができます。 今回はCoreImageで用意されているフィルターをいくつか試してみました。 元画像は下のものです、画像はぱくたそ様のものを使っています。 import UIKit class ViewController: UIViewContr…

Swift3でクラス名が重複した場合の対処法

Swift3では様々なクラス名のプレフィックスがなくなり、NSUserDefaults→UserDefaultsなどのようにクラス名が変更になりました。 今回は、その影響で自分の定義したクラス名と標準クラス名が被った場合の対処法について記載します。 例えばUserDefaultsではFo…

openURLがDeprecatedだったので、新方式に置き換える

iOS10からopenURLが非推奨になったので、新しいメソッドに置き換えました。 旧記法 UIApplication.shared.openURL(URL(string: "https://google.co.jp")!) 新記法 UIApplication.shared.open(URL(string: "https://google.co.jp")!, options: [:], completio…

Swift Playgroundsを使ってみる

今更ながら、Swift Playgroundsをしっかりと使ってみました。 Swift Playgrounds とは Swiftを簡単に実行できる環境です。 書いたコードがすぐに実行されるので、簡単なコードを試したい時などに向いています。 Playgroundを使ってみる PlaygroundはGet star…

【Swift】DateとDateComponentsの相互変換

Date → DateComponentsの変換とDateComponents → Dateの変換について調べてみました。 Date → DateComponents 下のようにCalendarを使うとDateComponentsを取得できます。 let date = Date() let components = Calendar.current.dateComponents(in: TimeZone…

【Swift, UIActionController】アクションシートで外側のビューを押された時のイベント

アクションシートで外側のビュー(下の灰色部分)を押された時のイベント周りについて調べてみました。 キャンセルボタンがある場合、外側のビューを押すとアクションシートは閉じます。 その際、キャンセルボタンが押された時と同じ処理が呼び出されます。 im…

【iOS】ナビゲーションバーの背景を画像にする

ナビゲーションバーの背景を画像にしてみました。 画像は下のフリー素材を使っています。 青色のざらざらした紙のテクスチャ素材 | Paper-co | 紙のテクスチャー素材を無料でダウンロードできるサイト バーに背景画像を設定する方法は下の通りです。 titleTe…

iMovieでAppStore用の動画を作る

iMovieを使ってAppstoreに掲載する動画を作ってみました。 まずはQuickTime Playerの新規ムービー収録でiPhoneの動画を作成します。 作った動画を保存します。 次はその動画をiMovieで編集します。 iMovieを立ち上げて「新規アプリケーションプレビュー」を…

Fireworksでゴールドの円を作成する

Fireworks CS3で次のようなボタンを作ってみました。 こちらですが作り方は非常に簡単です。 円を描いてスタイルタブの金色のテクスチャを選択するだけです。 テクスチャの再現 今回はこのデザインを参考に、同じものを自分で1から作ってみようと思います。 …

Fireworksで碁石を作る

Fireworksで下のような碁石を作ってみました。 デザインは下の絵文字を参考にしました。 背景はフリーのテクスチャを使っています。 碁石ですが、最初に黒丸を作成します。 次は線形のグラデーションを追加します。 グラデーションを次のような設定にします…

Fireworksで金属風なボタンを制作する

こちらの記事を参考にボタンを作ってみました。 ソフトはFireworksのCS3を使いました。 blog.fenrir-inc.com 下のものが制作物になります。 作成過程 まずは矩形を配置します。 次は矩形に円錐グラデーションを適用します。 色は#fffと#666を交互に配置しま…

【Swift】SKLightNodeで画面を明るく照らしてみる

ゲームフレームワークであるSpriteKitのSKLightNodeを使って、画面にライトを追加してみました。 まずは新規プロジェクト作成からゲームを選択します。 プロジェクトを作成したら、GameViewController.swiftを以下のようにします。 サンプルコードを削除して…

【SpriteKit】SKSpriteNodeの背景に繰り返し画像を使う

SpriteKitで繰り返し画像を背景に使う方法です。 元の画像素材は下のようなものです。 今回はこれを画面全体に繰り返し配置しました。 実際のコードは下の通りです。 まずはCoreGraphicsを使って、画面と同じサイズの繰り返し画像を生成。それをSKSpriteNode…

SpriteKitで「fatal error: use of unimplemented initializer 'init(size:)'」が起きた時の対処法

表題のエラーが出た時の対処法です。 下のようにSpriteKitで独自Sceneを定義してそれを呼び出した時に発生しました。 let scene = StartScene() class StartScene: SKScene { override init() { super.init() } required init?(coder aDecoder: NSCoder) { f…

Swiftでmp3の音を再生する(AVFoundation)

AVFoundationを使って音を鳴らしてみました。 まずは下のようにAssets.xcassetsにmp3ファイルを追加して下さい。 追加したデータは、下のようにNSDataAssetを使って取り出す事ができます。 let sound = NSDataAsset(name: "sound") sound.data // → Data型、…

ALRTを使ってUIAlertControllerの記述をすっきりさせる

ALRTというライブラリを使って、UIAlertControllerを短く書いてみました。 とても便利なライブラリだったので、今後は積極的に使っていきたいと思います。 github.com 作った方の記事はこちらです。 qiita.com インストール CocoaPodsでインストールしました…

【Swift, App Group】アプリ間でデータを共有する

アプリ間でデータを共有できる、App Groupを試してみました。 UserDefaultsのデータとファイルが共有可能です。 ただし自分が開発したアプリ同士でないと共有できないので注意が必要です。 まずは下のように、アプリを2つ作成します。 最初にMyApp1でデータ…

SceneKitで利用できる図形

SceneKitで利用できる図形を実際に配置して見ました。 対象クラスは下ドキュメントを参考にしました。 Built-in Geometry Types | Apple Developer Documentation SCNBox 立方体を生成するクラスです。 x, y, z を変更できます。 SCNFloor 名前の通り床とし…

【iOS】ファイルから読んだUIImageが表示されない問題対応

ファイルから画像を読み込むアプリでうまく画像表示できない事がありました。 class ViewController: UIViewController { var imageView = UIImageView() override func viewDidLoad() { super.viewDidLoad() // 画像をファイルに保存 let path = "\(NSSearc…

【Swift】UIImagePickerControllerでカメラロールから写真を取得

UIImagePickerControllerを使ったカメラロールの操作を試してみました。 ImagePickerの表示 まずはカメラロールの操作の為に、Info.plistにNSPhotoLibraryUsageDescriptionというキーを追加します。 ここにはカメラロールの利用目的を書きます。 ここに書か…

【Swift】ファイル書き込みで「Error Domain=NSCocoaErrorDomain Code=518 "指定されたURLタイプがサポートされていないため、ファイルを保存できませんでした。」エラーが出た時の対応

表題のエラーが出た時の対処法です。 今回は下のように画像をファイル保存をしようとしたら発生しました。 let path = "/xxx/yyy/zzz" let image = UIImage() let data = UIImageJPEGRepresentation(image, 80) if let url = URL(string: path) { try? data?…

UIViewのサブクラスで`init?(coder aDecoder: NSCoder)`が必要と言われる理由を調べてみる

UIViewでinitializerを実装すると、init?(coder aDecoder: NSCoder)も実装するように言われます。 今回はinit?(coder aDecoder: NSCoder)と言われる理由などを調べてみます。 init?(coder aDecoder: NSCoder)とはなにか init?(coder aDecoder: NSCoder)はNSC…

NSNotification.Name.UIApplicationDidBecomeActiveの前半部が省略できる理由

iOS

表題の件について調べてみました。 NSNotification.Name.UIApplicationDidBecomeActiveはNotificationに渡す変数で、アプリ立ち上げ時に特定のメソッドを呼びたい時などに利用します。 // アプリがアクティブになった時にtestというメソッドを呼び出す Notif…

【Swif】指紋認証時のUIApplicationDelegateメソッドに関する検証

iOS

iOSで指紋認証をした時、AppDelegateのどのメソッドが呼ばれるかを調査しました。 指紋認証の方法は下記事を元にしました。 llcc.hatenablog.com 検証 アプリを作ったら、AppDelegateを以下のように修正します。 これで、指紋認証時にどのメソッドが呼ばれる…

【Reporter】iTunesConnectの売上取得をID/Pass方式からAccessToken形式に切替

iOS

iTunesConnectの売上情報をAPIで取得する部分の修正をしました。 以前はID/Passwordを使った取得方式だったのですが、Appleから「ID/Password方式は2017年8月から使えなくなるよ」というメールが来たのでAccessTokenで取得する方式に変更しました。 ID/Passw…

カイ二乗検定とは何かを調べてみる

統計について調べていたら「カイ二乗検定」という単語が出てきたので調査。 カイ二乗検定とは カイ二乗検定 - Wikipedia 帰無仮説が正しければ検定統計量が漸近的にカイ二乗分布に従うような統計学的検定法の総称である。次のようなものを含む。 Wikipediaに…

ChameleonでUIColorを便利に使う

iOS

Chameleonというライブラリを試してみました。 github.com インストール CocoaPodsでインストールします。 pod "ChameleonFramework" 使い方 UIColorに多くのフラットカラーが追加されます。 import UIKit import ChameleonFramework class ViewController: …

ダイクストラ法で最短経路を求めてみる

iOS

ダイクストラ法という最短経路を求めるアルゴリズムをSwiftで試してみました。 参考にさせて頂いたのはこちらの記事です。 ダイクストラ法(最短経路問題) ダイクストラ法とは ダイクストラ法(だいくすとらほう、英: Dijkstra’s algorithm)はグラフ理論に…

rspec-retryでfeature specを安定させる

rspec-retryという、失敗したテストを再実行するGemを使ってみました。 GitHub - NoRedInk/rspec-retry: retry randomly failing rspec example まずはRailsのプロジェクトを作ってfeature specを書きます。 require 'rails_helper' feature 'test' do scena…

モンテカルロ法で円周率を求める

iOS

囲碁AIで有名なモンテカルロ法で円周率を計算できるようなので試してみました。 モンテカルロ法とは、Wikipediaによるとシミュレーションや数値計算を乱数を用いて行う手法の総称とのことです。 モンテカルロ法 - Wikipedia 実装方法 計算の手順は下の通りで…

【GameplayKit】GKRuleSystemで複雑な条件を管理する

iOS

GKRuleSystemという複数の条件を管理する機能を使ってみました。 使い方は下の通りです。 GKRuleSystemにGKRuleを追加する GKRuleSystemにパラメータをセットする GKRuleSystemの評価メソッド(evaluate)を呼ぶ 評価の結果を取得する コードは下の通りです。 …

【Swift】ベジェ曲線を自前で描いてみる

iOS

ベジェ曲線って良く聞くんですが、イマイチ理解できてなかったので自前で描いてみました。 具体的にはベジェ曲線の座標を自分で計算して描画をしてみました。 ベジェ曲線の座標の求め方 ベジェ曲線の座標は制御点を使って求められます。 今回は下のように制…

【Swift3】UIViewのdrawの中で線や文字や画像を描画する

iOS

UIViewのdrawメソッド中では線・文字・矩形など様々なものを描画できます。 今回はそれらの描画を試してみました。 検証用コードは下の通りです。 import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad(…

WKWebViewのキャッシュなどをクリアする

iOS

個人で出しているブラウザアプリの容量がかなりの大きさになっていたので調査しました。 キャッシュ等の削除方法は下の通りです。 これでアプリ容量が500MB → 60MBまで減りました。 WKWebsiteDataStore.default().removeData(ofTypes: WKWebsiteDataStore.al…