我正在尝试实现可以缩放的图像视图,并且还可以在顶部滚动文本。在我的视图控制器中,我有一个包含图像视图的滚动视图,并设置为放大而没有问题。
class ViewController: UIViewController, UIScrollViewDelegate {
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var scrollView: UIScrollView!
//First try getting the image setup correctly
override func viewDidLoad() {
super.viewDidLoad()
setupImageView()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func setupImageView() {
scrollView.contentSize = imageView.bounds.size
scrollView.minimumZoomScale = 0.5
scrollView.maximumZoomScale = 2.0
}
func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
return imageView
}
func scrollViewDidZoom(scrollView: UIScrollView) {
let imageViewSize = imageView.frame.size
let scrollViewSize = scrollView.bounds.size
let verticalPadding = imageViewSize.height < scrollViewSize.height ? (scrollViewSize.height - imageViewSize.height) / 2 : 0
let horizontalPadding = imageViewSize.width < scrollViewSize.width ? (scrollViewSize.width - imageViewSize.width) / 2 : 0
scrollView.contentInset = UIEdgeInsets(top: verticalPadding, left: horizontalPadding, bottom: verticalPadding, right: horizontalPadding)
}
}
现在我想在顶部放置另一个滚动视图,因此如果拖动文本标签可以滚动,但是在触摸时图像仍然可以被挤压和缩放。我在图像顶部放置了另一个滚动视图(不在内部),然后在内部放置了一个内容视图和UILabel
,就像我在IB中设置滚动视图时一样。当然文本滚动但是图像不会捏合和缩放,除非我将内容视图和顶部滚动视图子类化为:
override func pointInside(point: CGPoint, withEvent event: UIEvent?) -> Bool {
for subview in subviews as [UIView] {
if !subview.hidden && subview.alpha > 0 && subview.userInteractionEnabled && subview.pointInside(convertPoint(point, toView: subview), withEvent: event) {
return true
}
}
return false
}
这会将触摸传递给下面的滚动视图。但是现在我无法滚动文字了!有没有办法设置它,所以测试的UILabel
没有通过触摸并且可以滚动但是外面确实通过并允许图像缩放?任何关于此的指示都会非常感激!
答案 0 :(得分:0)
ScrollView
黑客并不总是最直观的过程。但在这种情况下,为什么不让UIViewController
实施UIScrollViewDelegate
协议并使用zoomFeature
中内置的UIScrollview
?
为minimumZoomScale
设置maximumZoomScale
和UIScrollView
并让scrollViewDelegate
实现以下功能并返回您希望imageView
的{{1}}:
zoom
API参考 - UIScrollView - UIScrollViewDelegate