2018年4月8日日曜日

音楽再生アプリを作ってみた

音楽を再生するためだけのシンプルなアプリを作ってみました。
Swift勉強がてらなのでクソ設計ですが、誰かの参考になればと思い、GitHubにて公開しております。
MITライセンスです。
[GitHub] Nokokinoko/nusic

質問などあればお気軽にどうぞ!

2018年4月5日木曜日

シリーズ完結

noteにて一つのシリーズを完結しました!

エンジニアよ、稼ぐか搾取されるか #3
エンジニアよ、稼ぐか搾取されるか #4

フリーランスとして働くために必要なスキルや、そもそも働くとは何なのか、エンジニアとして成功するために必要な能力について自分の見解ではありますが、連々と書き綴っております。
noteの方も見てもらえたら大変嬉しいです!

2018年4月4日水曜日

モーダル範囲外のタッチを判定

タッチした際にモーダル等の矩形の範囲内外を判定する方法です。
  • Xcode 8.3.3
  • Swift 3.1
import UIKit

class ExampleViewController: UIViewController {
  private var _Dismiss: Bool = false
  private let TAG: Int = 100

  override func viewDidLoad() {
    super.viewDidLoad()

    self.view.backgroundColor = UIColor.gray
    _Dismiss = false

    let viewAdd = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 400))
    viewAdd.backgroundColor = UIColor.white
    viewAdd.center = self.view.center
    viewAdd.tag = TAG
    self.view.addSubview(viewAdd)
  }

  override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
  }

  override func touchesBegan(_ touches: Set<uitouch>, with event: UIEvent?) {
    if _Dismiss {
      return
    }

    let point = touches.first?.location(in: self.view)
    let viewAdd: UIView = self.view.viewWithTag(TAG)! as UIView

    if !viewAdd.frame.contains(point!) {
      _Dismiss = true
      // 範囲外をタッチした時の処理
    }
  }
}

touchesBeganなので指が画面に触れた時のイベントです。
touchesEndedにすれば指が画面から離れた時のイベントになります。
ただ、touchesBeganに画面制御を記述すると反応の早い、ユーザビリティの高いアプリとユーザに判断されます。まぁこれも使い所次第ですが😅
課金とかにtouchesBeganで処理されたら私は速攻アプリアンインストールします😅
なんか信用出来ないですからね…

というかUIがボタンならBeganでselectな制御(グレースケールしたりとか縮小させたりとか)して、Movedで範囲内外を判定、Endedで範囲内(というかBeganで触ったものと同一のままならとか)ならselectedな制御して範囲外なら何もしない(タッチ状態フラグを解除程度)みたいな制御が普通ですね。

こういう制御例ってあまりネットに載らないですよね😇
各社ノウハウとして溜まってるだけで。
まぁ気が向いたらその辺も公開していきます🙌掲載するコード量がとんでもないことになりそう😇

2018年4月3日火曜日

遷移時にブラーを自然に重ねて表示

ブラー効果を簡単に利用するではSwiftの利用方法を紹介しました。
ただこれを使って重ねて表示(Over Current Context)するとフェードインした後、急にブラーの背景に変わって違和感があります。
今回はブラー効果を重ねて表示する際に自然に表示出来るよう調整する方法です。
  • Xcode 8.3.3
  • Swift 3.1
import UIKit

class ExampleViewController: UIViewController {
  private var _Blur: UIVisualEffectView!

  override func viewDidLoad() {
    super.viewDidLoad()

    _Blur = UIVisualEffectView(effect: UIBlurEffect(style: UIBlurEffectStyle.dark))
    _Blur.frame = self.view.frame
    _Blur.alpha = 0.0
    self.view.addSubview(_Blur)
  }

  override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
  }

  override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    UIView.animate(
      withDuration: 0.25,
      animations: { self._Blur.alpha = 1.0 }
    )
  }
}

なんか無理矢理感が否めないです🙇
ブラーをいじったり、アニメーションスタイルをいじれば良いのですが、私はそこまでのめり込むつもりがないのです😇

2018年4月2日月曜日

ブラー効果を簡単に利用する

iOSにて開発時に用意されているブラー効果(いわゆるすりガラスのようなぼかし効果です)をSwiftで簡単に利用する方法です。
  • Xcode 8.3.3
  • Swift 3.1
では早速コードになります。
let _Blur = UIVisualEffectView(effect: UIBlurEffect(style: UIBlurEffectStyle.dark))
_Blur.frame = self.view.frame
self.view.addSubview(_Blur)

この例ではUIBlurEffectStyle.darkを指定しているため黒のブラーです。
他にも.lightで白ブラー、.extraLightでlightよりも薄い白のブラーとなります。

ぼかし具合とか変えたい場合は結構いじる必要がありそうです😇
なんか実際に奥側に当たる箇所にブラー効果を加えてるのではなく、内部でスクリーンショット撮ってブラー効果を加えたものを設置してるのかな?
深く理解していませんが、そこまでApple様に加担するつもりはありませんので黙って用意されたもので我慢しておきます😇

2018年4月1日日曜日

TabBar + Navigation構成でViewに遷移

TabBarにNavigationではタブ要素にナビを追加して親子関係を作りました。
TabBarからViewに遷移ではタブのアイテムにViewへ遷移するための処理を追加しました。
今回はタブ要素にナビを追加した上で表示されたViewから別Viewへ遷移するための処理を紹介します。
  • Xcode 8.3.3
  • Swift 3.1
別Viewへ遷移するためのトリガーはボタンタッチとかでも良いですし、TableViewのCellタッチでも何でも良いです。
適切な所に処理を記述して下さい。
TabBarからViewに遷移と同様、重ねて表示(Over Current Context)します。
let vcNext = UIViewController()
vcNext.modalPresentationStyle = .overCurrentContext
parent?.parent?.present(vcNext, animated: false, completion: nil)

構成としてTabBarがアイテム要素を管理、各アイテムはNavigationであり、表示するViewControllerを持っています。
別Viewへ遷移するためのトリガーはこのViewControllerとなりますので、2つ上のparentにpresentを実行します。

なんかもう少しスマートなやり方がありそうな気がします…
相対的な指定が汎用性だったり拡張性を失わせておる😈