Swift3 Zoom 如何在捏合时更改 UICollectionView 帧大小?
Swift3 Zoom how to change UICollectionView frame size on pinch?
编辑:我已经更新了问题代码,现在它可以帮助任何人。
我在 UICollectionViewCell
中有一个 scrollView
,但无法通过捏合在模拟器中使用缩放功能。我可以通过手动缩放视图来实现这一点,但是当用户捏合缩放时,我需要将图像视图框架更改为全尺寸。现在它的尺寸是用框架宽度设置为屏幕宽度和框架高度设置为屏幕高度来填充的。由于图像是正方形,我需要动态更改框架宽度以等于框架高度。
这是我的代码:
import UIKit
class MyCollectionViewCell: UICollectionViewCell, UIScrollViewDelegate {
let screenWidth = UIScreen.main.bounds.width
let activityIndicator: UIActivityIndicatorView = {
let spinner = UIActivityIndicatorView()
spinner.activityIndicatorViewStyle = .white
spinner.color = Constants.APP_SPINNER_COLOR
spinner.hidesWhenStopped = true
return spinner
}()
var zoomScrollView: UIScrollView = {
let scrollView = UIScrollView()
scrollView.backgroundColor = .white
scrollView.minimumZoomScale = 1.0
scrollView.maximumZoomScale = 6.0
scrollView.clipsToBounds = true
scrollView.isUserInteractionEnabled = true
scrollView.translatesAutoresizingMaskIntoConstraints = false
return scrollView
}()
var itemImageView: UIImageView = {
let imageView = UIImageView()
imageView.contentMode = .scaleAspectFit
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.backgroundColor = .white
imageView.isUserInteractionEnabled = true
return imageView
}()
func viewForZooming(in zoomScrollView: UIScrollView) -> UIView? {
return itemImageView
}
override init(frame: CGRect) {
super.init(frame: frame)
zoomScrollView.delegate = self
contentView.backgroundColor = .white
contentView.addSubview(zoomScrollView)
zoomScrollView.addSubview(itemImageView)
itemImageView.addSubview(activityIndicator)
zoomImageView.frame = CGRect(x:0, y:0, width: screenWidth, height: screenHeight)
zoomScrollView.frame = itemImageView.frame
activityIndicator.anchorCenterXToSuperview()
activityIndicator.anchorCenterYToSuperview()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
您需要设置 scrollView.contentSize
才能使用双指缩放。参见 https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/UIScrollView_pg/CreatingBasicScrollViews/CreatingBasicScrollViews.html
这里做一个滚动视图的简单演示。
Note: Doesn't Give any constraint to image view
滚动视图代码如下:
import UIKit
class ViewController: UIViewController,UIScrollViewDelegate {
var imgDemo: UIImageView = {
let img = UIImageView()
img.contentMode = .scaleAspectFill
img.isUserInteractionEnabled = true
return img
}()
var scrollView:UIScrollView = {
let scroll = UIScrollView()
scroll.maximumZoomScale = 4.0
scroll.minimumZoomScale = 0.25
scroll.clipsToBounds = true
return scroll
}()
override func viewDidLoad() {
super.viewDidLoad()
imgDemo.frame = CGRect(x: 0, y: 0, width: view.frame.size.width, height: view.frame.size.height)
imgDemo.image = UIImage(named: "5.jpg")
scrollView.delegate = self
scrollView.frame = imgDemo.frame
scrollView.addSubview(imgDemo)
view.addSubview(scrollView)
}
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return imgDemo
}
}
编辑:我已经更新了问题代码,现在它可以帮助任何人。
我在 UICollectionViewCell
中有一个 scrollView
,但无法通过捏合在模拟器中使用缩放功能。我可以通过手动缩放视图来实现这一点,但是当用户捏合缩放时,我需要将图像视图框架更改为全尺寸。现在它的尺寸是用框架宽度设置为屏幕宽度和框架高度设置为屏幕高度来填充的。由于图像是正方形,我需要动态更改框架宽度以等于框架高度。
这是我的代码:
import UIKit
class MyCollectionViewCell: UICollectionViewCell, UIScrollViewDelegate {
let screenWidth = UIScreen.main.bounds.width
let activityIndicator: UIActivityIndicatorView = {
let spinner = UIActivityIndicatorView()
spinner.activityIndicatorViewStyle = .white
spinner.color = Constants.APP_SPINNER_COLOR
spinner.hidesWhenStopped = true
return spinner
}()
var zoomScrollView: UIScrollView = {
let scrollView = UIScrollView()
scrollView.backgroundColor = .white
scrollView.minimumZoomScale = 1.0
scrollView.maximumZoomScale = 6.0
scrollView.clipsToBounds = true
scrollView.isUserInteractionEnabled = true
scrollView.translatesAutoresizingMaskIntoConstraints = false
return scrollView
}()
var itemImageView: UIImageView = {
let imageView = UIImageView()
imageView.contentMode = .scaleAspectFit
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.backgroundColor = .white
imageView.isUserInteractionEnabled = true
return imageView
}()
func viewForZooming(in zoomScrollView: UIScrollView) -> UIView? {
return itemImageView
}
override init(frame: CGRect) {
super.init(frame: frame)
zoomScrollView.delegate = self
contentView.backgroundColor = .white
contentView.addSubview(zoomScrollView)
zoomScrollView.addSubview(itemImageView)
itemImageView.addSubview(activityIndicator)
zoomImageView.frame = CGRect(x:0, y:0, width: screenWidth, height: screenHeight)
zoomScrollView.frame = itemImageView.frame
activityIndicator.anchorCenterXToSuperview()
activityIndicator.anchorCenterYToSuperview()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
您需要设置 scrollView.contentSize
才能使用双指缩放。参见 https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/UIScrollView_pg/CreatingBasicScrollViews/CreatingBasicScrollViews.html
这里做一个滚动视图的简单演示。
Note: Doesn't Give any constraint to image view
滚动视图代码如下:
import UIKit
class ViewController: UIViewController,UIScrollViewDelegate {
var imgDemo: UIImageView = {
let img = UIImageView()
img.contentMode = .scaleAspectFill
img.isUserInteractionEnabled = true
return img
}()
var scrollView:UIScrollView = {
let scroll = UIScrollView()
scroll.maximumZoomScale = 4.0
scroll.minimumZoomScale = 0.25
scroll.clipsToBounds = true
return scroll
}()
override func viewDidLoad() {
super.viewDidLoad()
imgDemo.frame = CGRect(x: 0, y: 0, width: view.frame.size.width, height: view.frame.size.height)
imgDemo.image = UIImage(named: "5.jpg")
scrollView.delegate = self
scrollView.frame = imgDemo.frame
scrollView.addSubview(imgDemo)
view.addSubview(scrollView)
}
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return imgDemo
}
}