【发布时间】:2017-01-26 22:55:42
【问题描述】:
我正在尝试实现一个可以缩放的图像视图,并且可以在顶部滚动文本。在我的视图控制器中,我有一个包含图像视图的滚动视图并设置为没有问题的缩放。
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 没有通过触摸并且可以滚动但外部确实通过并允许图像缩放?对此的任何指示将不胜感激!
【问题讨论】:
标签: ios swift uiscrollview