また、swift3で、ターゲットも検索するジェスチャレコグナイザーを追加していて、ターゲットが通常self
である場合は、ジェスチャレコグナイザーを追加するUIViewをにする必要があることにも気づきましたlazy var
。そうしないと、ジェスチャ認識機能が機能しません。これはswift3のバグだと思います。理想的には、クラスが完全に初期化される前に変数でselfにアクセスしている場合、エラーがスローされるはずです。以下のコードはジェスチャレコグナイザーを検出しません。
let messageImageView: CachedImageView = {
let iv = CachedImageView()
iv.translatesAutoresizingMaskIntoConstraints = false
iv.layer.cornerRadius = 16
iv.layer.masksToBounds = true
iv.contentMode = .scaleAspectFill
iv.isUserInteractionEnabled = true
let zoomTap = UITapGestureRecognizer(target: self, action: #selector(handleZoomTap))
zoomTap.numberOfTapsRequired = 1
iv.addGestureRecognizer(zoomTap)
return iv
}()
これを修正するには、を使用する必要がありますlazy var
lazy var messageImageView: CachedImageView = {
let iv = CachedImageView()
iv.translatesAutoresizingMaskIntoConstraints = false
iv.layer.cornerRadius = 16
iv.layer.masksToBounds = true
iv.contentMode = .scaleAspectFill
iv.isUserInteractionEnabled = true
let zoomTap = UITapGestureRecognizer(target: self, action: #selector(handleZoomTap))
zoomTap.numberOfTapsRequired = 1
iv.addGestureRecognizer(zoomTap)
return iv
}()