しめ鯖日記

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

iOS

UICollectionViewの並び替え

iOS

UICollectionViewでの並び替えを試してみました。 Storyboardを使わないでUICollectionViewを表示 まずは普通にUICollectionViewを表示してみます。 コードは下の通りです。 class CollectionViewController: UICollectionViewController { override func vi…

【Xcode】Debug Memory Graphでメモリリークをチェック

iOS

Xcode8から登場したDebug Memory Graphという機能を試してみました。 これはインスタンス間の参照を図として表示できるもので、循環参照の発見などに役立ちます。 Debug Memory Graphは、アプリ起動後にデバッグエリア右端のアイコンをタップする事で実行で…

【Swift】mp3をバックグラウンド再生する

iOS

バックグラウンド再生を試してみました。 mp3をフォアグラウンドで再生 まずはフォアグラウンドでmp3を再生してみます。 再生したいmp3ファイルをAssets.xcassetsに追加して下さい。 そのあと下のようにmp3再生処理を記述すれば完了です。 import UIKit impo…

【iOS】1つの画像データで2xと3xにも対応する

iOS

毎回2xと3xのデータを作るのが大変だったので、1つの画像データ(PDF形式)で全部に対応する方法を調査しました。 今回は下のような画像で検証しました。 利用したツールはSketchです。 まずはこのデータをpdfとして書き出します。 次にAssets.xcassetsでImage…

paper-onboardingでおしゃれウォークスルー

iOS

paper-onboardingというライブラリを使っておしゃれなウォークスルーを実現してみました。 github.com paper-onboardingのインストール target 'MyApp' do use_frameworks! pod 'paper-onboarding' end 2017/10/16現在はSwift4に対応していないので、Swift3.…

iOSのサイレントプッシュを試してみる

iOS

iOSのサイレントプッシュというものを試してみました。 サイレントプッシュとは その名の通り、ユーザーに通知メッセージが出ないプッシュ通知の事です。 送信時にバックグラウンドで処理を走らせる事ができるので、バックグラウンドでのデータの更新などに…

\[weak self]が必要な時を調べてみる

iOS

循環参照対策で使う[weak self]ですが、常に付ける必要があるのか、それとも付けなくて良い時があるのかを調べてみました。 UIAlertControllerを使った検証 最初に、下のようなUIAlertControllerで[weak self]が必要なのかを調べてみました。 let alert = UI…

【iOS】FIrebaseでpush通知

iOS

Firebaseを使ったpush通知を試してみました。 APNs証明書の準備 まずはプッシュ通知用の証明書を作成します。 キーチェーンを開き、「認証局に証明書を要求」を選択します。 次の画面で、メールアドレスと名前を入力して証明書要求を作成します。 Certificat…

【Swift】isとisMemberOfClassとisKindOfClass

iOS

isとisMemberOfClassとisKindOfClassですが、挙動の差がわかりにくかったのでまとめてみました。 isKindOfClass 下のようなケースでは当然trueになります。 それとisKindOfClass/isMemberOfClassはNSObjectProtocolのメソッドなので、NSObjectなどを継承して…

【Swift】複数のプロトコルに準拠した変数の定義

iOS

下で定義された2つのプロトコルに準拠する型の書き方です。 protocol MyProtocol1 {} protocol MyProtocol2 {} 複数のプロトコルへの準拠を表したい時は、下のように&を使います。 protocol MyProtocol1 {} protocol MyProtocol2 {} class MyClass: MyProtoc…

Universal Linksを試してみる

iOS

iOSから登場したUniversal Linksを試してみました。 Universal Linksとは Universal Linksとは特定のURLにアクセスした時にアプリを遷移させる事ができる技術です。 例えば「https://example.com/にアクセスした時にアプリAに遷移する」と言った挙動が可能で…

ARKitでタップした場所に立方体を配置する

iOS

iOS11で登場したARKitを使って、画面上に立方体を配置してみました。 下のように地面に複数のオブジェクトが並ぶようにしています。 まずはプロジェクト作成から「Augmented Reality App」を選んでARKitのテンプレートを作成します。 次はサンプルコードを消…

Codable+AlamofireでAPIのレスポンスをオブジェクトに変換、Swift4.1対応版

iOS

AlamofireとCodableを使った実装を試してみました。 Alamofireは事前にCocoaPodsでインストールしておきます。 Alamofire+Codableの事前準備 target 'MyApp' do use_frameworks! pod 'Alamofire' end もし非SSL(http)通信をする場合はApp Transport Security…

SSReadingListでリーディングリストに項目追加

iOS

SafariServicesのSSReadingListという機能を使ってiPhoneのリーディングリストに項目を追加してみました。 リーディングリストとは Safariについている機能で、サイトを保存してあとで見る事ができます。 ブックマークと近いのですが「オフラインでも見れる…

【Swift】SimpleTabでおしゃれなUITabBarControllerを実現する

iOS

SimpleTabというUITabBarControllerがオシャレになったようなライブラリを試してみました。 github.com CocoaPodsでインストールします。 target 'MyApp' do use_frameworks! pod 'SimpleTab' end 2017/10/3時点ではSwift4に対応していないので、Swift3で動…

TabPageViewControllerでおしゃれなタブメニューを実現する

iOS

TabPageViewControllerというタブメニューを実現するライブラリを使ってみました。 このライブラリは有名なiQONで使われているということで、かなり期待できそうです。 github.com UIPageViewControllerをつかって無限スクロールできるタブUIを実装してOSSと…

【Swift】didSetの呼ばれるタイミング(初期化/Struct/Classなどで検証)

iOS

SwiftのdidSetの呼ばれるタイミングを調べてみました。 didSetとは プロパティーの値セットを検知する仕組みです。 下のように書くことで、プロパティーに値がセットされたタイミングを検知する事ができます。 class MainClass { var value: Int? { didSet {…

UIStackViewでUIViewを均等配置

iOS

iOS9から登場したUIStackViewを試してみました。 UIStackViewでUIViewを均等配置 まずはUIStackViewを配置します。 縦方向と横方向があるのですが、今回は横方向に配置しました。 UIStackViewは下のように画面に配置しました。 続けてUIViewを2つ配置します…

GPUImageでカメラの画像にリアルタイムでフィルターをかける

iOS

GPUImageというライブラリを使って、カメラ映像にリアルタイムでフィルターをかける事を試してみました。 github.com まずはCocoaPodsでGPUImageをインストールします。 target 'MyApp' do use_frameworks! pod 'GPUImage' end 次はInfo.plistのNSCameraUsag…

AVAudioEngineでmp3をエフェクト付きで再生する

iOS

AVAudioEngineというクラスを使って、mp3をエフェクト付きで再生してみました。 まずはプロジェクトにmp3ファイルを追加します。 追加したファイルがBuild Phasesにも入っているか確認します。 入っていない場合は+ボタンからmp3を追加します。 まずは普通に…

Phones.frameworkで端末の写真の取得・保存・削除

iOS

Phones.frameworkを使って、端末の写真の取得・保存・削除を試してみました。 写真を操作する前にInfo.plistにNSPhotoLibraryUsageDescriptionに写真を操作する理由を記述します。 これがないとアプリがクラッシュします。 取得 端末写真をUIImageとして取得…

【iOS】ユーザーがスクリーンショットを撮ったタイミングを検知する

iOS

スクリーンショットを撮ったタイミングを検知するには.UIApplicationUserDidTakeScreenshotを使います。 class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() NotificationCenter.default.addObserver(self, selec…

モバイル版GoogleAnalyticsでFirebaseを選ばない方法

iOS

最近はGoogleAnalyticsプロパティー作成時にモバイルアプリを選ぶとFirebase一択になりました。 今日はモバイルアプリでもFirebaseなしのGoogleAnalyticsを使う方法を書いてみます。 まずはウェブサイトとしてプロパティーを作成します。 続けてそのプロパテ…

iOS11 & Xcode9 で UINavigationController の pushViewController が斜めになる問題対策

iOS

push遷移アニメーションが下のように斜めになってしまったので対策を調べてみました。 stackoverflowによると、遷移先のviewDidLoadでtableViewのcontentInsetAdjustmentBehaviorを.neverにすれば良いとのことでした。 popViewControllerの時のアニメーショ…

【Swift4】形態素解析をやってみる | NSLinguisticTagger

iOS

NSLinguisticTaggerというクラスで形態素解析ができるようなので試してみました。 import UIKit let text = "I have a beautiful pen." let tagger = NSLinguisticTagger(tagSchemes: NSLinguisticTagger.availableTagSchemes(forLanguage: "en"), options: …

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

iOS

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

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

iOS

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

ActionSegueの動作を確認する

iOS

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

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

iOS

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

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

iOS

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