Articles

[SwiftUI] ActionSheetにイベントを設置する

SwiftUIのActionSheetの選択肢を選んだ時の動作をどこに記述すればいいのかわからなかったので調べてみた。

import SwiftUI

struct ContentView: View {
    @State private var isActionSheet = false // アクションシートの表示コントロール用
    
    var body: some View {
            Button(action: {
                self.isActionSheet.toggle() // ボタンをタップした時に表示する様にする
            }) {
                Text("ActionSheet")
            }
            .padding()
            .actionSheet(isPresented: $isActionSheet, content: {
                ActionSheet(title: Text("select action"), 
                                      message: Text("SubTitle"), 
                                      buttons: [
                                              .default(Text("Save"), action: {
                                                  print("Save")  // この選択肢が選ばれた時の動作
                                              }),
                                              .destructive(Text("Delete"), action: {
                                                  print("Delete")
                                              }),
                                              .cancel()  // アクションシートを閉じるだけ
                                              ])
            })
        }
    }

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

ボタンを押した時にisShowActionSheetの値を切り替えてActionSheetの表示、非表示をコントロールしている。

Bootrtrap4のブレークポイント一覧

sm,md,lgなどのブレークポイントの一覧

Bootstrapベースで作っていると独自のスタイルを当てるときもBootstrapに合わせてブレークポイントを設置したくなるので、その時用のメモ

[Django] cookie情報の設定、取得方法

クラスベース

クラスベースビューから操作する場合はdispatchメソッドをオーバーライドするのが一番お手軽だろう。

from datetime import datetime, timedelta
from django.views.generic import TemplateView

class MyView(TemplateView):
    template_name = "path/to/template"

    def dispach(self, request, *args, **kwargs):
        request.COOKIES['KEY'] # クッキーの値の取得
        response = super().dispach(request, *args, **kwargs)
        max_age = 30 * 60 # 30分
        expires = datetime.strftime(datetime.utcnow() + timedelta(seconds=max_age), "%a, %d-%b-%Y %H:%M:%S GMT")
        response.set_cookie(key, value, max_age=max_age, expires=expires)
        return response

set_cookieメソッドでcookieの値と有効期限を設定している。

[cocoapods] ローカルやフォークしたライブラリを利用する

一般的にはcocoapodsでライブラリを管理する場合、cocoapodsにライブラリを登録することになると思います。
が、ローカルにあるライブラリだったり、自分で本家からフォークしたライブラリを利用したいケースもあると思います。
そんな時のためのローカルだったりフォークしたライブラリの利用方法。

[Swift] UIImageをリサイズする方法メモ

画像をリサイズしてから保存、送信するケースが多いのでそのとき用のメモ

リサイズ用のエクステンション

extension UIImage {
    func resized(withPercentage percentage: CGFloat) -> UIImage? {
        let canvas = CGSize(width: size.width * percentage, height: size.height * percentage)
        return UIGraphicsImageRenderer(size: canvas, format: imageRendererFormat).image {
            _ in draw(in: CGRect(origin: .zero, size: canvas))  
        }
    }
    func resized(toWidth width: CGFloat) -> UIImage? {
        let canvas = CGSize(width: width, height: CGFloat(ceil(width/size.width * size.height)))
        return UIGraphicsImageRenderer(size: canvas, format: imageRendererFormat).image {
            _ in draw(in: CGRect(origin: .zero, size: canvas))
        }
    }
}

使い方

let image = UIImage(data: try! Data(contentsOf: URL(string:"http://i.stack.imgur.com/Xs4RX.jpg")!))!

let thumb1 = image.resized(withPercentage: 0.1)
let thumb2 = image.resized(toWidth: 72.0)

Xcode9・Swift4以降で動く