【问题标题】:ImageView in a ScrollView to zoom, crop and save swiftScrollView 中的 ImageView 可快速缩放、裁剪和保存
【发布时间】:2016-03-29 08:50:40
【问题描述】:

我试图让用户在我的应用上制作个人资料图片,但我遇到了一些似乎可以解决的问题。

我在我的视图控制器上添加了一个 uiscrollview。接下来我在uiscrollview中添加了一个UIimageview,宽度和高度都是一样的。

我要解决的第一件事是我希望用户输入的图片以最短的一侧填充 uiimageview。因此,如果图像的宽度为 500,高度为 1000,我希望该宽度可以填充图像视图,顶部和底部的额外高度等待用户滚动。

我也无法平移图像。在我捏缩放图像之前,我似乎无法平移图像。这么说我也认为我的完整图像没有显示,这可能会导致一些问题,我不确定为什么。

class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate, UIScrollViewDelegate {

@IBOutlet var scrollView: UIScrollView!

@IBOutlet var imageViewPicture: UIImageView!

@IBOutlet var addPicture: UIButton!

let image = UIImagePickerController()

@IBAction func addPicture(sender: AnyObject) {

    self.presentViewController(image, animated: true, completion: nil)
}

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) {

    self.dismissViewControllerAnimated(true, completion: nil)

    imageViewPicture.image = image
}

override func viewDidLoad() {
    super.viewDidLoad()

    self.view.backgroundColor = UIColor.orangeColor()

    self.scrollView.backgroundColor = UIColor.blueColor()

    self.scrollView.delegate = self

    //setting the min and max amount of zoom on the picture
    self.scrollView.minimumZoomScale = 1.0
    self.scrollView.maximumZoomScale = 4.0
    self.scrollView.bouncesZoom = false
    self.scrollView.bounces = false
    self.scrollView.alwaysBounceVertical = false
    self.scrollView.alwaysBounceHorizontal = false
    self.scrollView.scrollEnabled = true

    image.delegate = self
    image.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
    image.allowsEditing = false

    scrollView.layer.cornerRadius = (imageViewPicture.frame.size.width) / 2
    scrollView.layer.masksToBounds = true

    //gets rid of the indicator that shows where you are when scrolling
    scrollView.showsHorizontalScrollIndicator = false
    scrollView.showsVerticalScrollIndicator = false

    imageViewPicture.userInteractionEnabled = true
    let doubleTap = UITapGestureRecognizer(target: self, action: "doubleTapped")
    doubleTap.numberOfTapsRequired = 2
    imageViewPicture.addGestureRecognizer(doubleTap)

}

func doubleTapped() {

    if scrollView.zoomScale > 1.0 {
        scrollView.zoomScale = 1.0

    } else {
        scrollView.zoomScale = 2.0
    }   
}

func cropAndSave() {
    UIGraphicsBeginImageContextWithOptions(scrollView.bounds.size, true, UIScreen.mainScreen().scale)
    let offset = scrollView.contentOffset

    CGContextTranslateCTM(UIGraphicsGetCurrentContext(), -offset.x, -offset.y)
    scrollView.layer.renderInContext(UIGraphicsGetCurrentContext()!)

    let image = UIGraphicsGetImageFromCurrentImageContext()

    UIGraphicsEndImageContext()

    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)

}

func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {

    return self.imageViewPicture
}

【问题讨论】:

    标签: ios swift uiscrollview uiimageview


    【解决方案1】:

    背景: 在情节提要中添加了 UIScrollview(启用了用户交互并启用了多点触控)并将高宽比设置为 1 - 只是为了使其成为正方形。使用此功能可以进行平移和缩放。我没有做额外的设置,比如拐角半径等。我最近做了这个 - 认为它可能会对你有所帮助。

    class ViewController: UIViewController, UIImagePickerControllerDelegate,UINavigationControllerDelegate ,UIScrollViewDelegate{
    
    var imgview: UIImageView!
    var imagepicked:UIImage!
    
    @IBOutlet weak var scrollViewSquare: UIScrollView!
    
    
    
    let picker = UIImagePickerController()
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        picker.delegate = self
        scrollViewSquare.delegate = self
        //ImageViewInit()
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    
    
    func ImageViewInit(){
        imgview = UIImageView()
        imgview.frame =  CGRectMake(0, 0, imagepicked.size.width, imagepicked.size.height)
        imgview.image = imagepicked
        imgview.contentMode = .ScaleAspectFit
        imgview.backgroundColor = UIColor.lightGrayColor()
        scrollViewSquare.maximumZoomScale=4;
        scrollViewSquare.minimumZoomScale=0.02;
        scrollViewSquare.bounces=true;
        scrollViewSquare.bouncesZoom=true;
        scrollViewSquare.contentMode = .ScaleAspectFit
    
        scrollViewSquare.contentSize = imagepicked.size
        scrollViewSquare.autoresizingMask = UIViewAutoresizing.FlexibleWidth
        scrollViewSquare.addSubview(imgview)
        setZoomScale()
    }
    var  minZoomScale:CGFloat!
    
    func setZoomScale(){
        let imageViewSize = imgview.bounds.size
        let scrollViewSize = scrollViewSquare.bounds.size
        let widthScale = scrollViewSize.width / imageViewSize.width
        let heightScale = scrollViewSize.height / imageViewSize.height
        minZoomScale = max(widthScale, heightScale)
        scrollViewSquare.minimumZoomScale = minZoomScale
        scrollViewSquare.zoomScale = minZoomScale
        print("height nd width scale \(widthScale) & \(heightScale) Min zoom scale \(minZoomScale)")
    }
    
    func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
        return imgview
    }
    
    func imagePickerController(
        picker: UIImagePickerController,
        didFinishPickingMediaWithInfo info: [String : AnyObject])
    {
        imagepicked = (info[UIImagePickerControllerOriginalImage] as? UIImage)!
        print("Image (h,w) = (\(imagepicked.size.height) , \(imagepicked.size.width))")
        ImageViewInit()
        dismissViewControllerAnimated(false, completion: nil)
    
    }
    @IBAction func Pick(sender: AnyObject) {
        picker.allowsEditing = false
        picker.sourceType = .PhotoLibrary
        presentViewController(picker, animated: true, completion: nil)
    }
    

    }

    【讨论】:

      猜你喜欢
      • 2012-07-11
      • 2019-03-05
      • 1970-01-01
      • 2015-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-21
      相关资源
      最近更新 更多