テック-swift

Swift ドラッグ可能なView間を線でつなげる

最近、趣味でNeo4jを触ってて、Swift実装でソーシャルグラフのようなView表現を試してみた。 実装のイメージ ※ 何故かXcodeの動画キャプチャがエラー吐きまくりでカクカクになってしまった... まあ、こんなもんかな。strokeした線は消して再描画するみたい p…

Swift WKWebView、JSを利用したネイティブアプリ内で完結させるスクレイピング

サーバを持ちたくなくてネイティブアプリ側で外部サイトのHTMLをスクレイピング完結したい場合。 WKWebViewでページ取得するのが手取り早い。要はWKWebViewが読み込んだHTMLをスクレイピングしてしまおうという作戦。 ちなみに実験的に検証しただけなのでsto…

読了:iOSアプリ開発 自動テストの教科書

iOSアプリ開発 自動テストの教科書 そういえば読み終えていた。メモと感想をば。 僕自身のテストコードについての経験値はRailsのminitestで単体テストや統合テストを書いてるよ。みたいな感じ。GithubにpushするとCirecleCIでテストを回すというところまで…

GRDB.swiftの生SQL発行とマイグレーション

GRDB.swiftの生SQL発行とmigrationを試したのでメモ。 Swiftでカジュアルに生SQLでSQLiteの操作したいんだけど、GRDB.swift入れるしかなないのかなあ...Androidはめっちゃ簡単なんだけどなあ。— Fumiya Ichikawa (@LET__IT__RIDE) December 15, 2019 github.…

ストーリーボードを使わないTableViewの配置とカスタムCellの高さ自動調整

以前にもTableViewCellの高さ自動調整について書いたけど、今度はStoryboard、autolayoutを使わずにSwiftコードだけでやってみた。 www.letitride.jp いくつかの手順に分けて紹介していきます。 カスタムセルクラスの作成 例として、UILabelを配置したカスタ…

Swift QRコードの作成

ネット上に沢山あるんだけど、一応メモしておく。 文字列からQR化したCiImageを返すメソッド private func makeQRCode( str:String )->CIImage?{ let data = str.data(using: .utf8) let qr = CIFilter(name: "CIQRCodeGenerator", parameters: ["inputMessa…

Swift TextLabelの縦書き表示とその編集

(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a; b[a]=b[a]||function(){arguments.currentScript=c.currentScript ||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)}; c.getElementById(a)||(d=c.createElement(f),d.src=g, d.…

iPhone用Todoアプリを公開しました

appstoreにiPhone用のTodoアプリを公開しました。 Todo with LocationYoshiko IchikawaProductivityFreeapps.apple.com 何故今更Todoかというと、今年の夏頃に1日のうちに複数の場所に用事があることがあって、移動先のすべてが地図上で一眼で確認できるも…

Swift5 QRリーダーの実装 脳死コピペ用

概要 Swift5でQRコードを読み込んだので作業記録。 ググれば沢山の記事がヒットするんだけど、どれもViewControllerに結構な量のコードが記載されているので、コピペするには結構しんどい(笑) なので、コピペしやすいようにクラスファイルに落としましたとさ…

Swift weakプロパティを持つUIViewControllerを再利用する時は注意しよう

Swift weakプロパティを持つUIViewControllerを再利用する時は注意しよう。という話し。 概要 Storyboardからoutlet接続されたViewを持つUIViewControllerを再利用しようとした時、outlet接続されたプロパティがnilになる時があります。 再利用されるViewCon…

Swift PageViewControllerの両端タップのジェスチャーを無効にする

概要 PageViewControllerはデフォルトで左右のスワイプの他、View両端のタップも検知し、befor、afterメソッドを着火している。 スワイプのみ検知し、View両端のタップは無効とするよう処理を施す。 実装 PageViewControllerに登録されているUITapGestureRec…

Swift MapKitのマーカーカラーを外部からのステータスによって変更する

概要 MapKit Annotationのマーカーカラーをannotationの状態によって変更する。 MKPointAnnotationでは、マーカー座標、タイトル、サブタイトルの指定しか行えないので、MKPinAnnotationView、MKMarkerAnnotationViewを使用する。 MKPointAnnotationの拡張ク…

Swift Date型からString型へ

いつも忘れるのでメモ。 let date = Date() formatter.dateFormat = "MM/dd HH:mm" string = formatter.string(from: date)

Swift CoreData 複数のpredicate条件の指定とIN句の書き方

概要 CoreDataのpredicateに複数条件の指定を行う。 ユーザの入力等によって動的に条件を生成する場合に使用する。 実装 NSCompoundPredicate(andPredicateWithSubpredicates: [NSPredicate])をpredicateに渡すことで複数の条件を渡すことができる。andPredi…

Swift FSCalendarに初期値日付を設定する

概要 FSCalendar表示時に初期選択日を設定する 実装 FSCalendarはstoryboard上からoutlet接続されているものとする。 selectメソッドに表示時の指定日とするDateオブジェクトを渡せばよい。使用しない場合は現在日が表示時の選択日となる。 import FSCalenda…

Swift UICollectionViewのcellサイズを自動調整する

概要 UICollectionViewのcellサイズを中のコンテンツサイズに応じて自動調整する。 下イメージではUIButtonを横スクロールするUICollectionViewに並べた。UIButtonのサイズだけ、cellの横幅を自動調整している。 estimatedItemSizeを指定すると楽に設定する…

Swift NavigationControllerのnavigationItemを追加、変更する

backitemの変更 遷移先ではなく遷移元で設定する必要がある。 遷移元のViewController override func viewDidLoad() { super.viewDidLoad() self.navigationItem.backBarButtonItem = UIBarButtonItem(barButtonSystemItem: .cancel, target: nil, action: n…

Swift UISegmentedControlを未選択状態にする

概要 UISegmentedControlを選択してない状態にする。 設定方法 selectedSegmentIndexに.noSegmentを指定する UISegmentedControl.selectedSegmentIndex = UISegmentedControl.noSegment

Swift UIPageViewControllerの最大最小ページ数を設定する

概要 UIPageViewControllerの始点、終端のページを設定する。要は「これ以上はページをめくれないよ」という設定。 UIPageViewControllerはTableViewなどとは違ってcountを返すメソッドがないので、before、afterのメソッドで前後のページがあるか否かの判定…

Swift UIPageViewControllerのジェスチャ完了のイベントを取得する

概要 UIPageViewControllerDataSourceのviewControllerBeforeとviewControllerAfterメソッドで前後のViewControllerを切り替える場合、両メソッドはジェスチャ途中で発生する為、予期せぬプロパティの保持結果となってしまうケースがある。 ダメなケース 下…

Swift NavigationControllerから遷移元ViewControllerを取得する

概要 NavigationControllerから遷移した時の遷移元ViewControllerを取得する。 戻る遷移時に遷移元に値を渡したい時なんかに使える。 NavigationControllerからModal遷移時の戻る //self.presentingViewControllerはNavigationControllerが格納 let nvc = se…

Swift Dateオブジェクトから時間以下を切り捨てる

Swift Dateオブジェクトから時間以下を切り捨てる dateComponentsを使用する。 let calendar = Calendar.current let comps = calendar.dateComponents([.year, .month, .day], from: Date()) let truncateDay = calendar.date(from: comps)

Swift TableViewのcell内の要素サイズが動的に変わる場合のcell高さ自動調節

概要 TableViewのcellの要素のサイズが動的に変更される時のcellの高さを自動で調整する。 cellの高さを変更する手法 まずはcellの高さを変更する手法から。 autolayoutが適切に設定されていて、制約からcellの高さが導き出せる時は、 override func viewDid…

Swift CoreData Entityにインデックスを追加する

概要 既存のCoreData Entityのカラムに対してindexを作成する方法。 失敗ケース ios - Why Xcode does not show index options for CoreData entities and attributes? - Stack Overflow ios - Core data indexing in iOS11 - Stack Overflow を参考にしなが…

Swift TextViewでのタグ入力UIを作った

概要 こういうインターフェースを作ったので記録。 こういうやつ タグ入力UI pic.twitter.com/6d7mriPEr2— Fumiya Ichikawa (@LET__IT__RIDE) August 22, 2019 実装 UILabelのタグ風の加工については省略。この記事を参考にすればいいと思う。 UILabelでタグ…

Swift 独自ViewのDelegateをオーバライドする

概要 例えば、TextViewの変更を検知して、Viewの色を変えるという独自拡張Viewがあったとする。 class UIChangeColorTextView: UITextView { override init(frame: CGRect) { delegate = self } required init?(coder aDecoder: NSCoder) { super.init(coder…

Swift TextFieldで時刻入力のチェック処理

概要 TextFieldで時刻入力を求めるインターフェースのチェック処理。TextFieldプロパティとdelegateに以下の処理を記述した。 入力キーボードは数字のみ 5桁目の入力は切り捨てる。常に0〜4桁のみ表示 1桁目が3〜9の場合、"03"〜"09"のように頭に0を補完 2桁…

Swift UILabel上にaddSubviewしたUIButtonが反応しない

結論 UILabel.isUserInteractionEnabled = trueが必要 概要 例えばこんなタグ風UIで削除ボタンを設置したのだけど、ボタンが反応しない... private func makeAddressLabel(){ addressLabel.text = "サンフランシスコ Taylor St627付近" addressLabel.sizeToF…

Swift 拡張UIクラスのイニシャライザ

プログラムからのインスタンス作成時とxib load時の2つのイニシャライザを定義しておくと両方のIFから利用できるオブジェクトとなる。 class MyUILabel: UILabel { //storyboardに配置したオブジェクトも動作するのだが、storyboard上の設定で上書きされるの…

Swift UILabelにpaddingをつける

簡単な方法 一番簡単な方法はテキストを中央寄せにして、Label自体のwidth, heightを伸ばすやり方。 label.text = "文字列" label.textAlignment = .center //書き出す文字列にサイズを合わす label.sizeToFit() //余白となるサイズを加える label.frame.siz…