【发布时间】:2019-03-30 23:47:28
【问题描述】:
我创建了包含 Scroll-view.inside 滚动视图的 CustomeView,其中有一个包含图像视图的容器视图和两个按钮(确定和取消)。
以下是我的视图层次结构。 CustomeView -> ScrollView -> ContainerView -> (imageView + OtherComponent).
我面临两个问题。
- 在缩小 imageview 时,CustomeView 也用 相对于 Scrollview。
-
其他组件位置在放大时发生变化。
class cameraPreview : UIView , UIScrollViewDelegate { var selectedImage : UIImage! var backGroundView = UIView() var imageScrollview = UIScrollView() var metaData : [String:Any]? let backgroundImageView = UIImageView() var closeButton : UIButton = { let button = UIButton(type: UIButtonType.custom) button.setImage(UIImage(named:"closeWhite"), for: .normal) button.addTarget(self, action: #selector(closeClick), for: .touchUpInside) return button }() var okButton : UIButton = { let button = UIButton() button.setTitle("OK", for: .normal) button.titleLabel?.font = UIFont.systemFont(ofSize: 15) button.setTitleColor(UIColor.black, for: .normal) button.backgroundColor = UIColor.white button.layer.cornerRadius = 15 button.addTarget(self, action: #selector(okClick), for: .touchUpInside) return button }() override init(frame: CGRect) { super.init(frame: frame) commoninit() } required public init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) commoninit() } required init(image:UIImage,frame:CGRect,metaData:[String:Any]?) { super.init(frame: frame) self.selectedImage = image self.metaData = metaData commoninit() } override func layoutSubviews() { } func commoninit() { backGroundView.backgroundColor = UIColor.white backgroundImageView.contentMode = .scaleAspectFit self.addSubview(imageScrollview) imageScrollview.addSubview(backGroundView) backGroundView.addSubview(backgroundImageView) backGroundView.addSubview(closeButton) backGroundView.addSubview(okButton) imageScrollview.snp.makeConstraints { (make) in make.edges.equalTo(self) } backGroundView.snp.makeConstraints { (make) in make.edges.equalTo(imageScrollview) make.height.width.equalTo(self) } backgroundImageView.snp.makeConstraints { (make) in make.edges.equalTo(backGroundView) } okButton.snp.makeConstraints { (make) in make.width.equalTo(80) make.height.equalTo(30) make.centerX.equalTo(backGroundView.snp.centerX) make.bottom.equalTo(backGroundView).offset(-20) } closeButton.snp.makeConstraints { (make) in make.width.height.equalTo(30) make.left.equalTo(20) make.top.equalTo(10) } backgroundImageView.image = selectedImage imageScrollview.delegate = self imageScrollview.minimumZoomScale = 1.0 imageScrollview.maximumZoomScale = 6.0 } func viewForZooming(in scrollView: UIScrollView) -> UIView? { return backgroundImageView } @objc func closeClick(sender:UIButton) { self.removeFromSuperview() } @objc func okClick(sender:UIButton) { if let topCotroller = UIApplication.shared.gettopMostViewController() { self.removeFromSuperview() let mediaDetailController = UploadDetailsViewController.instantiate(fromAppStoryboard: .Upload) mediaDetailController.mediaImage = selectedImage if metaData != nil { mediaDetailController.exifDictionary = metaData![kCGImagePropertyExifDictionary as String] as? [String : AnyObject] } topCotroller.navigationController?.pushViewController(mediaDetailController, animated: true) } }}
以下是在当前 ControllerView 中添加 cameraPreview 的代码
let imagePreview = cameraPreview(image: image, frame: UIScreen.main.bounds,metaData:metaData)
self.view.addSubview(imagePreview)
【问题讨论】:
标签: ios swift uiscrollview uiimageview zooming