首页 > 解决方案 > 无法使用 Parse 在滚动视图中缩放 UIImage

问题描述

谁可以帮助缩放滚动视图。使用 Parse 获取图片,但不能进行缩放。通过所有可能的功能都不起作用 - aImg 这是(UIImage)到 setupPhotosInScrollView 功能,有人可以帮忙吗?尝试过的框架,但没有任何帮助


代码

class AdPhotos: UIViewController, UIScrollViewDelegate {

    /*--- VIEWS ---*/
    @IBOutlet weak var containerScrollView: UIScrollView!


    /*--- VARIABLES ---*/
    var adObj = PFObject(className: ADS_CLASS_NAME)
    var photosArray = [UIImage]()



    // ------------------------------------------------
    // MARK: - VIEW DID LOAD
    // ------------------------------------------------
    override func viewDidLoad() {
        super.viewDidLoad()

        // Ad Title
        adTitleLabel.text = "\(adObj[ADS_TITLE]!)"

        // Get photos
        let imageFile = adObj[ADS_IMAGE1] as? PFFile
        imageFile?.getDataInBackground(block: { (data, error) in
            if error == nil { if let imageData = data {
                self.photosArray.append(UIImage(data: imageData)!)
                self.setupPhotosInScrollView()
                print("PHOTO 1")
                }}})

        DispatchQueue.main.async {

            if self.adObj[ADS_IMAGE2] != nil {
                self.pageControl.numberOfPages = 2
                let imageFile = self.adObj[ADS_IMAGE2] as? PFFile
                imageFile?.getDataInBackground(block: { (data, error) in
                    if error == nil { if let imageData = data {
                        self.photosArray.append(UIImage(data: imageData)!)
                        self.setupPhotosInScrollView()
                        print("PHOTO 2")
                        }}})
            }
            if self.adObj[ADS_IMAGE3] != nil {
                self.pageControl.numberOfPages = 3
                let imageFile = self.adObj[ADS_IMAGE3] as? PFFile
                imageFile?.getDataInBackground(block: { (data, error) in
                    if error == nil { if let imageData = data {
                        self.photosArray.append(UIImage(data: imageData)!)
                        self.setupPhotosInScrollView()
                        print("PHOTO 3")
                        }}})
            }
            if self.adObj[ADS_IMAGE4] != nil {
                self.pageControl.numberOfPages = 4
                let imageFile = self.adObj[ADS_IMAGE4] as? PFFile
                imageFile?.getDataInBackground(block: { (data, error) in
                    if error == nil { if let imageData = data {
                        self.photosArray.append(UIImage(data: imageData)!)
                        self.setupPhotosInScrollView()
                        print("PHOTO 4")
                        }}})
            }
            if self.adObj[ADS_IMAGE5] != nil {
                self.pageControl.numberOfPages = 5
                let imageFile = self.adObj[ADS_IMAGE5] as? PFFile
                imageFile?.getDataInBackground(block: { (data, error) in
                    if error == nil { if let imageData = data {
                        self.photosArray.append(UIImage(data: imageData)!)
                        self.setupPhotosInScrollView()
                        print("PHOTO 5")
                        }}})
            }

        }
    }
    // ------------------------------------------------
    // MARK: - SETUP PHOTOS IN SCROLLVIEW
    // ------------------------------------------------
    @objc func setupPhotosInScrollView() {
        var X:CGFloat = 0
        let Y:CGFloat = 0
        let W:CGFloat = view.frame.size.width
        let H:CGFloat = view.frame.size.height
        let G:CGFloat = 0
        var counter = 0

        // Loop to create ImageViews
        for i in 0..<photosArray.count {
            counter = i

            // Create a ImageView
            let aImg = UIImageView(frame: CGRect(x: X, y: Y, width: W, height: H))
            aImg.tag = i
            aImg.contentMode = .scaleAspectFit
            aImg.image = photosArray[i]


            // Add ImageViews based on X
            X += W + G
            containerScrollView.addSubview(aImg)

        } // ./ FOR loop

        // Place Buttons into a ScrollView
        containerScrollView.contentSize = CGSize(width: W * CGFloat(counter+2), height: H)
    }


    // ------------------------------------------------
    // MARK: - CHANGE PAGE CONTROL PAGES ON SCROLL
    // ------------------------------------------------
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let pageWidth = containerScrollView.frame.size.width
        let page = Int(floor((containerScrollView.contentOffset.x * 2 + pageWidth) / (pageWidth * 2)))
        pageControl.currentPage = page
    }
}

标签: iosswiftuiscrollviewuiimageviewuiimage

解决方案


我认为您不需要 ScrollView 和管理 Pagingnation。您需要 CollectionView 只需启用 Paging 选项 From story-bored。

  1. 在您的 ViewController 中拖动 Collection View。从属性选择器启用分页选项。

  2. 将 CollectionView( leading, trailing, top, bottom) 分配给 View( leading, trailing, top, bottom)

  3. 将 CollectionView 单元格拖到 CollectionView 中。调整单元格以填充整个 CollectionView

  4. 将 Scrollview 添加到 CollectionView 单元格中并添加 ScrollView( leading, trailing, top, bottom) == CollectionView cell( leading, trailing, top, bottom)

  5. 在 Scrollview 中添加 imageView 并将 imageView( leading, trailing, top, bottom) == Scrollview ( leading, trailing, top, bottom) 和相等的宽度和高度添加到 CollectionView 单元格。

  6. CollectionView 的实现DataSource和方法。Delegate

和缩放添加以下代码到您的 CollectionView 单元格

import UIKit

class CustomeCellCollectionViewCell: UICollectionViewCell , UIScrollViewDelegate {

    @IBOutlet var imageView : UIImageView!
    @IBOutlet var scrollView : UIScrollView!

    override func awakeFromNib() {
        super.awakeFromNib()

        scrollView.delegate = self
        scrollView.minimumZoomScale = 1.0
        scrollView.maximumZoomScale = 6.0
    }

    func viewForZooming(in scrollView: UIScrollView) -> UIView? {

        return feedsImageView
    }
}

在此处输入图像描述


推荐阅读