放大视图控制器 swift
Zoom a view controller in swift
我正在创建一个 iOS 应用程序 (swift),其中我在视图控制器中有多个标签。我没有使用任何滚动视图。我需要在捏合手势上缩放视图控制器。
我知道我已经找到了滚动视图的解决方案,但我不想在我的视图控制器中实现 scrollView。
任何帮助,将不胜感激!谢谢。
更新:
我在视图控制器中实现了一个滚动视图。我在滚动视图中添加了一个视图,该视图包含一些标签,但我现在面临的问题是:
缩放不会保持静止。也就是说,只要我松开手指,滚动视图就会自动缩放到原来的样子。
当视图控制器处于原始状态时,应用程序崩溃。
这是我的代码:
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet var viewThis: UIView!
override func viewDidLoad() {
super.viewDidLoad()
scrollView.delegate = self
//let gesture = UIPinchGestureRecognizer(target: self, action: #selector(pinchAction(sender:)))
//self.view.addGestureRecognizer(gesture)
// Do any additional setup after loading the view.
let scrollViewFrame = scrollView.frame
let scaleWidth = scrollViewFrame.size.width / scrollView.contentSize.width
let scaleHeight = scrollViewFrame.size.height / scrollView.contentSize.height
let minScale = min(scaleWidth, scaleHeight);
scrollView.minimumZoomScale = minScale
scrollView.maximumZoomScale = 1.0
scrollView.zoomScale = minScale;
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return viewThis
}
UIView的transform
属性可以使视图及其子视图变小或变大,如缩放效果。使用 UIPinchGestureRecognizer 的示例:
class ExampleViewController: UIViewController {
var previousScale:CGFloat = 1.0
override func viewDidLoad() {
super.viewDidLoad()
let gesture = UIPinchGestureRecognizer(target: self, action: #selector(pinchAction(sender:)))
self.view.addGestureRecognizer(gesture)
}
func pinchAction(sender:UIPinchGestureRecognizer) {
let scale:CGFloat = previousScale * sender.scale
self.view.transform = CGAffineTransform(scaleX: scale, y: scale);
previousScale = sender.scale
}
}
也许您需要考虑在缩放后调整视图的位置,使用 CGAffineTransform(translationX: , y: )
来做到这一点。
仍然同意 UIScrollView 是最简单的缩放方式。
感谢@YunCHEN 帮我解决了这个问题。他让我知道代码中发生了什么。我遇到了一个问题,在缩小时,我的应用程序曾经崩溃,因为与视图宽度和高度相比,它超出了限制。如果以后有人发现同样的问题,我已经更新了一个答案。
第 1 步:在视图控制器中添加一个 scrollView。
第 2 步:在 scrollView 上添加视图。
第 3 步:在此视图上添加对象库中的所有 items/objects。
第四步:在代码中绑定scrollView和view到view controller。同时添加一个 UIScrollViewDelegate。
第 5 步:执行以下操作。
代码如下:
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet var viewThis: UIView!
override func viewDidLoad() {
super.viewDidLoad()
scrollView.delegate = self
scrollView.minimumZoomScale = 1.0;
scrollView.maximumZoomScale = 3.0
scrollView.zoomScale = 1.0
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return viewThis
}
再次感谢@YunCHEN对我的帮助!
我正在创建一个 iOS 应用程序 (swift),其中我在视图控制器中有多个标签。我没有使用任何滚动视图。我需要在捏合手势上缩放视图控制器。 我知道我已经找到了滚动视图的解决方案,但我不想在我的视图控制器中实现 scrollView。 任何帮助,将不胜感激!谢谢。
更新:
我在视图控制器中实现了一个滚动视图。我在滚动视图中添加了一个视图,该视图包含一些标签,但我现在面临的问题是:
缩放不会保持静止。也就是说,只要我松开手指,滚动视图就会自动缩放到原来的样子。
当视图控制器处于原始状态时,应用程序崩溃。
这是我的代码:
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet var viewThis: UIView!
override func viewDidLoad() {
super.viewDidLoad()
scrollView.delegate = self
//let gesture = UIPinchGestureRecognizer(target: self, action: #selector(pinchAction(sender:)))
//self.view.addGestureRecognizer(gesture)
// Do any additional setup after loading the view.
let scrollViewFrame = scrollView.frame
let scaleWidth = scrollViewFrame.size.width / scrollView.contentSize.width
let scaleHeight = scrollViewFrame.size.height / scrollView.contentSize.height
let minScale = min(scaleWidth, scaleHeight);
scrollView.minimumZoomScale = minScale
scrollView.maximumZoomScale = 1.0
scrollView.zoomScale = minScale;
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return viewThis
}
UIView的transform
属性可以使视图及其子视图变小或变大,如缩放效果。使用 UIPinchGestureRecognizer 的示例:
class ExampleViewController: UIViewController {
var previousScale:CGFloat = 1.0
override func viewDidLoad() {
super.viewDidLoad()
let gesture = UIPinchGestureRecognizer(target: self, action: #selector(pinchAction(sender:)))
self.view.addGestureRecognizer(gesture)
}
func pinchAction(sender:UIPinchGestureRecognizer) {
let scale:CGFloat = previousScale * sender.scale
self.view.transform = CGAffineTransform(scaleX: scale, y: scale);
previousScale = sender.scale
}
}
也许您需要考虑在缩放后调整视图的位置,使用 CGAffineTransform(translationX: , y: )
来做到这一点。
仍然同意 UIScrollView 是最简单的缩放方式。
感谢@YunCHEN 帮我解决了这个问题。他让我知道代码中发生了什么。我遇到了一个问题,在缩小时,我的应用程序曾经崩溃,因为与视图宽度和高度相比,它超出了限制。如果以后有人发现同样的问题,我已经更新了一个答案。
第 1 步:在视图控制器中添加一个 scrollView。
第 2 步:在 scrollView 上添加视图。
第 3 步:在此视图上添加对象库中的所有 items/objects。
第四步:在代码中绑定scrollView和view到view controller。同时添加一个 UIScrollViewDelegate。
第 5 步:执行以下操作。
代码如下:
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet var viewThis: UIView!
override func viewDidLoad() {
super.viewDidLoad()
scrollView.delegate = self
scrollView.minimumZoomScale = 1.0;
scrollView.maximumZoomScale = 3.0
scrollView.zoomScale = 1.0
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return viewThis
}
再次感谢@YunCHEN对我的帮助!