radiusが入った三角形のCGPathを作る

rect(四角形)であればUIBezierPathを使えば簡単に生成できる。 三角形の場合はCGMutablePathを使って生成する(三角形でなく他の多角形でも可能)。 下は右向きの三角形のpathを作る例。 // 各頂点を定義 let top = CGPoint(x: 22, y: 18) let right = CGP…

CAShapeLayer.pathに複数のUIBezierPathを指定する

UIBezierPathのappend(_:)を使う。 let leftRect = CGRect(origin: leftOrigin, size: size) let originalPath = UIBezierPath(roundedRect: leftRect, cornerRadius: 1) let rightRect = leftRect.offsetBy(dx: 12, dy: 0) let rightPath = UIBezierPath(ro…

UISliderのカスタマイズ

thumb(丸いやつ)はsetThumbImage(_:for)、thumbより左のプログレスはsetMinimumTrackImage(_:for)、thumbより右のプログレスはsetMaximumTrackImage(_:for)でそれぞれカスタマイズできる。 let thumbImage = UIColor.white.circleImage(width: 16, height:…

UIColorからUIImageに変換する

個人的には以下のようなメソッドをUIColorのextensionとして宣言している。 extension UIColor { /// 四角 func rectImage(width: CGFloat, height: CGFloat) -> UIImage { let rect = CGRect(x: 0, y: 0, width: width, height: height) UIGraphicsBeginIma…

observeValue(forKeyPath:of:change:context:)を使わないKVO

KVOでお馴染みのobserveValue(forKeyPath:of:change:context:)がSwift 3.2以降からdeprecatedになるらしい。 上記をoverrideして定義すると、 Block Based KVO Violation: Prefer the new block based KVO API with keypaths when using Swift 3.2 or later.…

YouTube動画のm3u8URLを取得する

https://www.youtube.com/get_video_info?video_id={videoId} 上記URLのvideo_idパラーメタに該当するYouTube動画のvideoIDを与えると、以下のような{key}={value}&が連続する形でレスポンスが返ってくる hl=ja_JP&timestamp=1520407725&... この中にhlsvpと…

HLSのm3u8ファイルからスナップショットを取得する

iOSでAVPlayer/HLSでストリーミング再生をしているときに、再生時間ごとのスナップショットを取りたいということがあった。 一番例としてピンとくるのは、動画のseek中のスナップショットでしょうか。 色々試行錯誤した結果以下で取得できた。 let asset = A…

Swiftで処理を遅延実行

何か処理を遅延実行させたい時はDispatchQueueのasyncAfter(deadline:execute:)を使う。 DispatchQueue.main.asyncAfter(deadline: .now() + 3, execute: { // 3秒後に実行 }) 実行内容にアニメーションが付随する場合はUIView.animte(animateWithDuration:d…

SKStoreReviewControllerを実装する

import StoreKit SKStoreReviewController.requestReview() 以上。超簡単。 SKStoreReviewControllerはiOS 10.3以上のみ対応なので、10.3未満の対応は別途必要。 実装するメリットは、ユーザーがApp Storeに行かなくてもアプリ内でレビューできる点。 ユーザ…

selectedBackgroundViewを使ってUICollectionViewCellの選択時の色を変える

UICollectionViewCellの場合はselectedBackgroundViewはcontentViewの背後にあるので、contentView.backgroundColorを指定した状態でselectedBackgroundViewを設定しても変化が見えない。 class AnyCell: UICollectionViewCell { override func awakeFromNib…

UICollectionViewでセル数が少ないときにスクロールできない

全コンテンツ(セル)が画面に収まる程度の場合、UICollectionViewはスクロールができなくなる。 スクロール方向が縦の場合はalwaysBounceVertical、横の場合はalwaysBounceHorizontalをtrueにすることでスクロールできるようになる。 collectionView.always…

ModalのWebViewでFileReaderを使うとViewControllerごとdismissされる

iOS

FileReaderとは developer.mozilla.org Webページ内でハードウェアのファイルにアクセスするやつ。 iOSの場合これ。 ViewControllerごとdismissされる これをModalで開いたViewController内WebViewで使うと、アクション選択時やキャンセル時にViewController…

コマンドラインでMacのスペックを調べる

$ system_profiler SPHardwareDataType Hardware: Hardware Overview: Model Name: MacBook Pro Model Identifier: MacBookPro11,5 Processor Name: Intel Core i7 Processor Speed: 2.5 GHz Number of Processors: 1 Total Number of Cores: 4 L2 Cache (pe…

gitのcommitのauthorを変更する

git

kitoko552.hatenablog.com gitでリポジトリごとにユーザー(author)を変える方法については上記の記事で書きましたが、すでにcommitしてしまっていて後からauthorを変更したい場合は以下のコマンドを実行します。 git commit --amend --author="ユーザー名 …

Swift 3におけるアクセス修飾子

要点 open: 外部モジュールからアクセスでき、外部モジュールで継承・オーバーライドができる(Swift 3未満のpublicと同義)。 public: 外部モジュールからアクセスできるが、外部モジュールで継承・オーバーライド等はできない。 internal: 同じモジュール…