プログラミングと旅と映画の日々

普段はスマホ決済サービスの会社でバッグエンドを担当しているエンジニアです。プログラミングと趣味の映画、株、時々うどんに関してブログを書いていこうと思います。海外ドラマ、クロスバイクも好きです。

【Swift】超簡単!Swiftでカメラを利用する方法

カメラの起動、撮影などを自分のアプリで利用する方法もかなり簡単に実装可能です。


宣言するプロトコルは以下の二つ

UIImagePickerControllerDelegate, UINavigationControllerDelegate

importするlibrary

Photos


controllerでimport

import Photos


plistに情報を追加する
f:id:takanori5:20171018124410p:plain

f:id:takanori5:20171018171154p:plain

privacyと入力し、以下のcamera ...を選択
f:id:takanori5:20171018171810p:plain

valueには適当な文字列(カメラを使う)などを入力

これは許可画面に表示される文字に利用されます。


続いてPhotoLibraryも同様に追加
f:id:takanori5:20171018172226p:plain


以上で事前準備はOKです。

あとは実装していくだけです。

カメラを利用する場合には以下のように書きます。

(ちなみにアルバムを利用する場合は、UIImagePickerControllerSourceType.cameraのところを

UIImagePickerControllerSourceType.

photoLibraryに変更するだけであとは一緒です。)


        let sourceType:UIImagePickerControllerSourceType = UIImagePickerControllerSourceType.camera
        
        // カメラが利用可能かチェック
        
        if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera){
            // インスタンスの作成
            let cameraPicker = UIImagePickerController()
            cameraPicker.sourceType = sourceType
            cameraPicker.delegate = self

            self.present(cameraPicker, animated: true, completion: nil)
        }

以上でOKです。

もし、撮影したimageをすぐ背景に適用したいなどであれば

imagePickerController というdelegateメソッドないに記述すればOK

【Swift】 UITextFieldタップ時にUIDatePickerを表示する方法

以下のように、UITextFieldのタップ時にUIDatePickerを表示する方法を記載。

日本語のサイトにSwiftのver4.0での実装方法が載っておらず、苦戦したため備忘です。

 
f:id:takanori5:20171022101916p:plain


 

1.story boadにUITextFieldを配置し、ソースコードに関連付け

@IBOutlet var dateTextField: UITextField!

 

2.UITextFieldDelegateプロトコルを宣言

UITextFieldDelegate

class ViewController: UIViewController, UITextFieldDelegate {

 

3.viewDidLoadでdatePickerのインスタンスを生成し、フォーマットした値をtextFieldに入れる

    override func viewDidLoad() {

        super.viewDidLoad()

        dateTextField.delegate = self

        let datePicker = UIDatePicker()   

        // ②日本の日付表示形式にする

        datePicker.locale = NSLocale(localeIdentifier: "ja_JP") as Locale

        datePicker.addTarget(self, action: #selector(ViewController.datePickerValueChange(sender:)), for: UIControlEvents.valueChanged)

        dateTextField.inputView = datePicker

        

    }

 

 

 

XCodeが異常に重くなった時の対処法

XCodeで新規でプロジェクトを作りまくり開発を行なっていたところ

インジケーターがいちいち周り、異常に重くなり開発が進まなくなりました。

 

ログがたまりまくっていることが原因でした。

以下のコマンドでログを削除

これでめちゃくちゃ軽くなりました!!

mv ~/Library/Developer/Xcode/iOS Device Logs/ iOS* ~/backup_log/

Swift UserDefautsでUIImageを保存する方法

例えばフォトアルバムから取得したimageを背景などに設定し、

利用したい場合、取得したファイルを永続化する必要があります。

 

そんな時にはUIImageを一度NSData型に変換して保存します。取得するときに、再変換すればUIImageを取得することが出来ます。

 

以下のようなソースになります。

保存

 UserDefaults.standard.set(UIImageJPEGRepresentation(image, 0.8), forKey: "imageData")

        

 

取得

let imageDate:NSData = UserDefaults.standard.object(forKey: "imageData") as! NSData

        backImageView.image = UIImage(data:imageDate as Data)

超簡単!Swiftで音を再生する方法

Swiftを音を再生する方法は超簡単です。

 

ライブラリをimport

音の再生に必要なframeworkをimportしましょう!

importするframeworkは `AVFoundation`

 

 

以下のようにしましょう

まずプロジェクトを選択し、Generalの下の方の

Linked Framework and Libraries

 

f:id:takanori5:20171018124410p:plain

 

+ボタンをおし、AVFoundatioをadd

 

f:id:takanori5:20171018124844p:plain

 

これでプロジェクトでAVFoundationが利用できるようになりました。

 

続いて利用したいVIewControllerに取り込みましょう!

import AVFoundation

 

そしてAVAudioPlayerを宣言

var audioPlayer: AVAudioPlayer!

 

あとは音楽を再生したい箇所で以下のようにかけばOKです

 

        if let url = Bundle.main.url(forResource: "delete", withExtension: "mp3") {

            do {

                audioPlayer = try AVAudioPlayer(contentsOf: url)

                audioPlayer?.play()

            } catch {

                audioPlayer = nil

            }

        } else {

            //error

        }

 

audioPlayer?.play()で再生

stop()で停止できます。

 

超簡単ですね!!

 

takanori5.hatenablog.com

すぐできる!SwiftでのUITableViewの使い方

f:id:takanori5:20171017103942p:plain

 

上記のようなUIはUITableViewを使って実現されています。

Lineのトークの一覧にも利用されていますね。

 

私がSwiftを始めたばかりの頃は、本やいろんなサイトを見ながらこのUITableViewをなんとか使えるようになりましたが

無駄に時間がかかったので簡単にまとめておきます。

 

UITableViewとは

情報をリスト表示したい時に使います。

 

そして1つの項目を表示する領域を「セル」と言います。
セルには、UITableViewCellというものを使用します。

 

使い方

大きくやることは以下の3つ!!

  1. storyboardにUITableViewとUITableViewCellを配置します
  2. UITableViewとUITableViewCellに情報を受け渡す設定
  3. ViewControllerに必要なメソッドを書く

 

セルをView Controller内で使用出来るように設定しておく

Table View Cellを選択し、右側の「Show the Attributes inspector」という項目を選択します。

ここの「Identifier」という項目にセルの識別子を付けます。

 

上記の設定が済んだら後はコードをどんどん書いていきます!

 

 ViewControllerの編集

ここでやること

  1. 表示するための変数(配列)を定義
  2. UITableViewDelegateとUITableViewDataSourceを実装
  3. デリゲートメソッドとデータソースメソッドを定義
  4. 変数の内容が表示されるようにする

1.は配列を定義するだけ

 

2.は以下のように実装

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

 

ここまで記述するとエラーが起きます。

これは3.のdelegate datasourceを実装すれば解消されます。

 

3.

/// セルの個数を指定するデリゲートメソッド(必須)
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 0
}
 
/// セルに値を設定するデータソースメソッド(必須)
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
 
    return UITableViewCell()
}
 
/// セルが選択された時に呼ばれるデリゲートメソッド
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {}
 
4.
では変数の値が表示されるようにしましょう!1.で用意した配列のカウントを返します。
このメソッドには表示するセルの個数を指定する
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return array.count
}
 
次は値の設定です。
11
/// セルに値を設定するデータソースメソッド(必須)
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
 
    // セルを取得する
    let cell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier("(identifireに設定した値)", forIndexPath: indexPath)
 
    // セルに表示する値を設定する
    cell.textLabel!.text = fruits[indexPath.row]
 
    return cell
}

 

 storyboardでTable View CellのIdentifierに設定した値を入れる必要がある

 

 

takanori5.hatenablog.com

   

eclipseのパッケージエクスプローラーの表示を見やすく変更する<文系エンジニアのプログラミング>

パッケージエクスプローラーの表示方法は階層表示に変更することが可能です。

格段に見やすくなるためお勧め。

 

1.Eclipseのパッケージエクスプローラー上部ツールバーの右端の下三角(▽)をクリック
2.「パッケージ・プレゼンテーション」→「階層(H)」を選択