しるてく

技術的な話をします

UICollectionViewでCellを長押ししたい

UILongPressGestureRecognizer を都度生成するの効率悪いのでViewDidLoadで一度だけ生成して、タップ後にどのCellを押したか判定する感じにする

     override func viewDidLoad() {
        super.viewDidLoad()

        let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: "onLongPressAction:")
        longPressRecognizer.allowableMovement = 10
        longPressRecognizer.minimumPressDuration = 0.5
        self.collectionView.addGestureRecognizer(longPressRecognizer)
    }
    func onLongPressAction(sender: UILongPressGestureRecognizer) {
        let point: CGPoint = sender.locationInView(self.collectionView)
        let indexPath = self.collectionView.indexPathForItemAtPoint(point)

        if let indexPath = indexPath {
            switch sender.state {
            case .Began:
                // 例えばTimerをstartさせる
            case .Ended:
                // 例えばTimerをstopさせる
            default:
                break
        }
    }

AutoLayout で UIButton の image が拡大しない

UIButtonをautolayoutで配置して、画面サイズにあわせて拡縮するようにすると、UIButton自体は拡大するんだけど、そこに設定しているimage画像(UIButtonと同じサイズ、同じアスペクト比)が拡大してくれなくて困ったマン。

f:id:ofsilvers:20150626075522p:plain

Alignmentをこうやればちゃんと拡大してくれるぽい。

iOS でカスタムフォントを使いたいけどなぜか表示されないとき

develop.calmscape.net

の通りにやったつもりだけど、なんか実機にインストールすると表示されなかった。

  1. フォント追加してる? -> OK
  2. info.plist > Fonts provided by application に追加されてる? -> NG
  3. Copy Budle Resourcesに追加されてる? -> NG

な感じだったので、良くわからないけど、Target > Build Phases > Copy Bundle Resources に手動で追加したフォントを入れてあげたら大丈夫になった。

storyboard で UILabel を袋文字にする

袋文字を使いたい病になった。

UIStrokeLabelみたいな感じでクラス作っておく。

import Foundation
import UIKit

@IBDesignable
class UIDecorationLabel: UILabel {
    @IBInspectable var strokeSize: CGFloat = 0
    @IBInspectable var strokeColor: UIColor = UIColor.clearColor()
    
    override func drawTextInRect(rect: CGRect) {
        // stroke
        let cr = UIGraphicsGetCurrentContext()
        let textColor = self.textColor
        
        CGContextSetLineWidth(cr, self.strokeSize)
        CGContextSetLineJoin(cr, kCGLineJoinRound)
        CGContextSetTextDrawingMode(cr, kCGTextStroke)
        self.textColor = self.strokeColor
        super.drawTextInRect(rect)
        
        CGContextSetTextDrawingMode(cr, kCGTextFill)
        self.textColor = textColor
        super.drawTextInRect(rect)
    }
}

あとはUILabelのクラスに上のやつ設定して、適当に値を突っ込んであげればOK

最近気になっているswiftのLibraryのメモ

最近swift書いててなんかいいライブラリないかなって調べてるとブラウザのタブがすごいことになるので、今開いている(良さそうと思ってる)やつをメモっておく。

Util

github.com

moment.js っぽく、時間まわりをアレコレできるやつ。 webのときはよく使ってたし、慣れた感じで書けて良さそう。

Layout

github.com

css-layoutswift実装でCSSでレイアウトできる。ステキ感ある。

github.com

AutoLayoutをシンプルに定義できるやつ。 SwiftAutoLayout ってやつもあるけど、そっちよりわかりやすそう。 Storyboardにどうしようもない恨みが溜まった時に利用したい(そうでなければできるだけStoryboardに集約させたいので見送り)。

Alert

どれが良いか悩み中。 どれも見た目をカスタマイズできないので、 MJPopupViewController とかで作るか、自作してしまうのがはやそう。

Other

github.com

「このswiftライブラリが凄い!」みたいなまとめ集。まだ全部見切れてないけど参考になりそう。

BigQuery メモ

BigQuery使いたくてちょっと調べたけど、ちゃんと使うのはもうちょっと後になりそうなので。参考になりそうなページだけぺろぺろ貼っておく。

www.buildinsider.net

すごい安いし、なんでもそこそこ高速なところが良いところ。

mysqlから突っ込むなら App::BigQuery::Importer::MySQL を使うのが良さそう。 とりあえず Quickstartbq Command-Line Tool を読んでおけば、大体分かる感じだ。

SlackでHubot Integrationを使わずにHubotを利用する

もしも、深淵な理由でIntegrationをユーザが追加できない場合にslackでhubotが使いたくなったら…。

というアレな状況だったので、hubot-slackのAdapterのmsg.as_user, msg.usernameを直接いじってゴリ押しした。 もしかしたらもっとスマートなやり方があるかもしれない。

github.com

自分が使いたかっただけなので、雑だけどやったこと。

  1. /src/slackをコピーして/src/slack_no_integrationを作成
  2. 自分の発言を無視しないようにした(hubot=自分になるので)
  3. 既読にしないようにした
  4. 名前を設定できるようにした
  5. 無視するチャンネルリストを取得できるようにした(hubotの参加チャンネル=自分の参加チャンネルになるので)