UIImageView 上的 UITapGesture
UITapGesture on UIImageView
当 UIImageView 上没有图像时,此代码总是崩溃。
设置水龙头。
if imageView.gestureRecognizers == nil || imageView.gestureRecognizers!.count == 0 {
let gestureRecognizer = UITapGestureRecognizer(target: self, action: "fullImage:")
imageView.addGestureRecognizer(gestureRecognizer)
}
然后,使用照片浏览器。
func fullImage(sender: AnyObject) {
let attachedView = sender.view!!.superview!
let images = attachedView.subviews.map{ ([=11=] as! UIImageView).image! }
let imageView = (sender as! UIGestureRecognizer).view! as! UIImageView
let tag = imageView.tag
let photos = IDMPhoto.photosWithImages(images)
let browser = IDMPhotoBrowser(photos: photos, animatedFromView: (sender as! UIGestureRecognizer).view!)
browser.displayToolbar = false
browser.displayActionButton = false
browser.displayArrowButton = false
browser.displayCounterLabel = true
browser.scaleImage = imageView.image
browser.usePopAnimation = true
browser.setInitialPageIndex(UInt(tag - 1))
...
有什么好的方法可以避免nil crash吗?
尝试将代码放在if let
:
if let image = imageView.image {
let gestureRecognizer = UITapGestureRecognizer(target: self, action: "fullImage:")
imageView.addGestureRecognizer(gestureRecognizer)
}
试试这个:
let images = attachedView.subviews.map{ ([=10=] as? UIImageView).image }.filter { [=10=] != nil }
这样,如果子视图不是 UIImageView
,您的代码就不会崩溃,并且您可以过滤掉返回 nil 的子视图。
当 UIImageView 上没有图像时,此代码总是崩溃。
设置水龙头。
if imageView.gestureRecognizers == nil || imageView.gestureRecognizers!.count == 0 {
let gestureRecognizer = UITapGestureRecognizer(target: self, action: "fullImage:")
imageView.addGestureRecognizer(gestureRecognizer)
}
然后,使用照片浏览器。
func fullImage(sender: AnyObject) {
let attachedView = sender.view!!.superview!
let images = attachedView.subviews.map{ ([=11=] as! UIImageView).image! }
let imageView = (sender as! UIGestureRecognizer).view! as! UIImageView
let tag = imageView.tag
let photos = IDMPhoto.photosWithImages(images)
let browser = IDMPhotoBrowser(photos: photos, animatedFromView: (sender as! UIGestureRecognizer).view!)
browser.displayToolbar = false
browser.displayActionButton = false
browser.displayArrowButton = false
browser.displayCounterLabel = true
browser.scaleImage = imageView.image
browser.usePopAnimation = true
browser.setInitialPageIndex(UInt(tag - 1))
...
有什么好的方法可以避免nil crash吗?
尝试将代码放在if let
:
if let image = imageView.image {
let gestureRecognizer = UITapGestureRecognizer(target: self, action: "fullImage:")
imageView.addGestureRecognizer(gestureRecognizer)
}
试试这个:
let images = attachedView.subviews.map{ ([=10=] as? UIImageView).image }.filter { [=10=] != nil }
这样,如果子视图不是 UIImageView
,您的代码就不会崩溃,并且您可以过滤掉返回 nil 的子视图。