2019-08-01から1ヶ月間の記事一覧

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…

Swift リバースジオコーディングを利用する

CLGeocoderを使うと、緯度経度から簡単にReverse Geocodingすることができる。 Reverse Geocodingの実装 処理は非同期で行うので、完了後のコールバックメソッドに処理結果を引数としたクロージャーを利用すれば応用がきく。 import CoreLocation class MyLo…

Swift MapViewに現在地点を配置する

MapView property User Locationにチェックを入れる。これにチェックを入れると現在地が取得が出来た時に自動で現在地に青丸のannotationが表示される。 info.plist 位置取得に対するPrivacyを定義する。 Privacy - Location When In Use Usage Description:…

Swift MapViewにピンを立てる

Map上のピンはMKPointAnnotationというオブジェクトで管理・表現されている。 ピンを立てる シンプルなピンの場合、MKPointAnnotationをMapViewにaddAnnotationすることですぐに実装できる。 let mapView = MKMapView() let annotation = MKPointAnnotation(…

Swift dismiss時に値を渡してViewControllerを閉じる

遷移元のViewControllerはpresentingViewControllerのオブジェクトに格納されている。 PrevViewControllerから遷移してきたとすると、以下のように記述するとアクセスできる。 let vc = self.presentingViewController as! PrevViewController vc.var1 = "va…

Swift MapViewで長押しした場所のlocationを取得する

てっきりMKMapViewDelegateの中に実装メソッドがあると思ってたら違ってた... UILongPressGestureRecognizerで長押しイベントを検知する必要がある。 let mapView = MKMapView() override func viewDidLoad() { super.viewDidLoad() //長押し時のイベントを…

Swift Viewにジェスチャーリスナーを定義する

View.addGestureRecognizer()を使用する。addするGestureRecognizerはUIGestureRecognizerを継承したオブジェクトとなる。 GestureRecognizerの種類 UITapGestureRecognizer : タップ、ダブルタップ UIPinchGestureRecognizer : ピンチ UIPanGestureRecogniz…

Swift TextView編集時のキーボードに入力完了ボタンを表示する

イメージ 下記例でいうところのDoneボタンを表示する。 実装 ボタン部分の枠はUIToolbarで表示を行うと非常に楽。キーボードとUIToolbarのjoinはinputAccessoryViewで行える。 override func viewDidLoad() { super.viewDidLoad() // ツールバー生成 サイズ…

Swift Firebase Google Authenticationを導入

Firebase側の設定 ログイン方法 > Googleを有効にしておく。 プロジェクトの公開名は認証画面で表示されるアプリ名となる。 アプリの基本設定 podのインストール pod 'Firebase' pod 'Firebase/Auth' pod 'GoogleSignIn' $ pod install $ open FirebaseChat.…

Swift UIVisualEffectViewにViewを追加する

EffectViewに直接addSubviewしようとすると以下のようなエラーが出る。 let visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .dark)) visualEffectView.addSubview( UILabel() ) Do not add subviews directly to the visual effect vie…

Swift UIImageデータをbase64エンコードする

UIImageデータをbase64エンコードする エンコード let imageData = image.pngData()! as NSData // for jpg //let imageData = image.jpegData(compressionQuality: 0.8)! as NSData let base64String = imageData.base64EncodedString(options: .lineLength…

Swift segueを使わずにstoryboard上のViewControllerにアクセスする

segueを使わずにstoryboard上のViewControllerにアクセスする。 アクセス対象のViewControllerのIdentifierを定義した上で、storyboard?.instantiateViewController()を使用してインスタンスを取得できる。 override func viewDidAppear(_ animated: Bool) {…

Swift UIActivityViewControllerで簡単にSNSシェアを実装

よくあるこの画面。UIActivityViewControllerを使用すると簡単に実装できる。 シェア画面の起動 UIActivityViewControllerのactivityItemsに各SNSに渡したいオブジェクトをセットすればよい。String、UIImage、URLなどがある。尚、Facebookはテキストのセッ…

Swift UIImagePickerControllerでフォトアルバム、カメラアクセスを行う

info.plist 必要に応じて以下のパーミッションをinfo.plistに記述する。 Privacy - Photo Library Additions Usage Description フォトアルバムに画像を保存 Privacy - Photo Library Usage Description フォトアルバムにアクセス (不要っぽい?) Privacy - …

Swift 特定viewのスクリーンショットをとる

特定Viewのスクリーンショットを撮る。 UIGraphicsBeginImageContextWithOptionsにスクリーンショットを撮る座標と縦横幅を指定する。よって対象のViewのframeを指定すればよい。 UIGraphicsBeginImageContextWithOptions(view.frame.size, false, 0.0) view…

Vue.js issue管理に登録したissueをストレージに保存する

ブラウザを閉じたりリロードした後でも、登録、更新を行ったissueを再度表示できるようにする。 ストレージはローカル内で保存管理するものとし、サーバに送信したり取得したりといったことは行わない。 Vueでの処理 プロパティ issueList が追加、変更され…

Vue.js インスタンスプロパティの変更を監視する

こういったVueオブジェクトが定義されていた場合、arrayListに何らかの操作が行われた時に発火するメソッドを定義できる。 var app1 = new Vue({ el: '#app1', data: { arrayList: [] } }); watch メンバの定義 watchメンバの中に監視するプロパティとchange…

JavaScript ローカルストレージの保存と参照

ブラウザは接続先のドメインごとにWebストレージ領域を割り当てられる。ストレージにはkey,valueの形式で保存可能。 ブラウザが変わればストレージ領域も変わる。 (そういったコードを書かない限り)サーバに送信しない。サーバから操作できない。がCookieと…

Vue.js Vueオブジェクトのライフサイクル

Vueオブジェクトは以下のライフサイクルがあり、各ポイントに応じて処理を実行することができる。 beforeCreate : Vueインスタンスが作成される直前 created : インスタンスの作成が完了 beforeMount : element(el: "id")にマウントされる直前 mounted : ele…

Vue.js issue管理にチケット状態を追加する

イメージ 状態は["new", "assigned", "closed"]の三種類とした。 Vue実装 プルダウンはloop生成 var app1 = new Vue({ el: '#app1', data: { statusList: ["new", "assigned", "closed"], ...略 issueオブジェクトにチケット状態を持つプロパティを追加 meth…

Vue.js issue管理 削除機能を追加した

画面イメージ HTML v-showで表示される要素の中に削除ボタンを設置した。 削除ボタンのv-on:click.stopは.stopをつけることによってli要素のv-on:clickのメソッド呼び出しを抑制できる。これをつけないと親要素のv-on:clickも発火しておかしな挙動になる。 d…

Vue.js 親要素のイベントを抑制する

入れ子になった要素で、親、子ともにv-on:clickなんかのイベントを持っている時、子の要素をクリックすると親の要素のイベントの発火する。 例えばこんなの。親divで何らかのイベント定義あり、divに入ったボタンがあるケース。divがアコーディオンになって…

Swift LINEアプリにメッセージを送信する

line://msgというschemaにメッセージを追記してオプーンすればよい。特にSDK等を入れる必要もない。 テキストメッセージを送信する スキーマは/text 。その後ろに送信したい文字列を追記する。マルチバイトが入る場合、URLエンコードしておく。 let lineSche…

'UIImageJPEGRepresentation' has been replaced by instance method 'UIImage.jpegData(compressionQuality:)'

swift4.2?くらいからUIImageJPEGRepresentationメソッドはUIImage.jpegDataに差し替えないといけない。 'UIImageJPEGRepresentation' has been replaced by instance method 'UIImage.jpegData(compressionQuality:)' 差し替え例 //before UIImageJPEGRepres…

Swift LINEログイン連携

LINEの開発者登録 LINE連携するには開発者登録が必要。以下からLINEアカウントで簡単に登録できる。 LINE Developers ログインすると、まずはプロバイダーを登録してね。といわれるので、案内にしたがって登録する。 次に連携するアプリの登録を行う。登録し…