照片預覽的scrollView控件

class PhotoWallBigImageController: UIViewController, UIScrollViewDelegate {

    //第幾張照片

    var index:Int?

    //所有的照片

    var data:[PhotoWallBean] = []

    //照片張數

    var count:Int?

    var scrollView:UIScrollView!

    var iasdf:Int = 0

    var bar:UIView!

    //底部描述文字的大小

    var worldSize:CGFloat = 12

    //底部字的的高度

    var buttomView_height:CGFloat = 120

    //底部描述文字到右邊的距離

    var buttomView_right:CGFloat = 60

    //上一個界面的傳過來的本地圖片

    var lastImage:String?

    override func viewDidLoad() {

        super.viewDidLoad()

        if AppDelegate.phoneType == PhoneType.IPHONE_6_P{

            worldSize = 14

            buttomView_height = 140

            buttomView_right = 80

        }

        addView()

        addNAvigation()

        

        calculaNowFrame()

    }

    //根據上一個界面點擊的圖片計算當前scrollview偏移量

    func calculaNowFrame(){

        var nowFrame = scrollView.frame

        nowFrame.origin.x = nowFrame.size.width * CGFloat(index! - 0)

        nowFrame.origin.y = 0

        scrollView.scrollRectToVisible(nowFrame, animated: true)

    }

    //頂部bar和圖片描述的隱藏狀態

    var isOrNo:Bool = true

    //添加界面

    //底部描述文字

    var buttomViews:[UIView] = []

    //承載照片的滾動view

    var imageScrollViews:[UIScrollView] = []

    //承載照片的view

    var imageViews:[UIImageView] = []

    //承載照片的view、用於縮放

    var imageBaseView:UIView!

    //用於承載所有照片的高度

    var imageHeight:[CGFloat] = []

    var pages:[UIView] = []

    func addView(){

        scrollView = UIScrollView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height))

        self.view.addSubview(scrollView)

        //設置scrollView的內容總尺寸

        if count == nil {

            count = 0

        }

        scrollView.contentSize = CGSizeMake(

            self.view.frame.width * CGFloat(count!),

            self.view.frame.height

        )

        //關閉滾動條顯示

        scrollView.showsHorizontalScrollIndicator = false

        scrollView.showsVerticalScrollIndicator = false

        scrollView.scrollsToTop = false

        //關閉回彈

        scrollView.bounces = false

        //協議代理,在本類中處理滾動事件

        scrollView.delegate = self

        scrollView.tag = 1

        //滾動時只能停留到某一頁

        scrollView.pagingEnabled = true

        //添加頁面到滾動面板裏

        let size = scrollView.bounds.size

        let taget = UITapGestureRecognizer(target:self, action: "scrollViewAction")

        taget.numberOfTapsRequired = 1

        taget.numberOfTouchesRequired  = 1

        scrollView.userInteractionEnabled = true

        scrollView.addGestureRecognizer(taget)

        if let lImage = lastImage{

            let page = UIView()

            let imageScrollView = UIScrollView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height))

            imageScrollView.showsHorizontalScrollIndicator = false

            imageScrollView.showsVerticalScrollIndicator = false

            imageScrollView.scrollsToTop = false

            //關閉回彈

            imageScrollView.bounces = false

            imageScrollView.backgroundColor = UIColor.clearColor()

            imageScrollViews.append(imageScrollView)

            imageScrollView.maximumZoomScale = 2

            imageScrollView.minimumZoomScale = 1

            imageScrollView.delegate = self

            imageScrollView.tag = 2

            let imageView = UIImageView()

            

            imageViews.append(imageView)

            //添加雙擊事件

            let imageViewTaget = UITapGestureRecognizer(target:self, action: "imageViewTagetAction")

            imageViewTaget.numberOfTapsRequired = 2

            imageViewTaget.numberOfTouchesRequired  = 1

            imageView.userInteractionEnabled = true

            imageView.addGestureRecognizer(imageViewTaget)

            imageView.image = UIImage(named: lImage)

            addImageScroll(imageView,imageScrollView:imageScrollView,page:page,photodescription:"")

        

            

        }else{

            for course in data {

                let page = UIView()

                var imageScrollView = UIScrollView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height))

                imageScrollView.showsHorizontalScrollIndicator = false

                imageScrollView.showsVerticalScrollIndicator = false

                imageScrollView.scrollsToTop = false

                //關閉回彈

                imageScrollView.bounces = false

                imageScrollView.backgroundColor = UIColor.clearColor()

                imageScrollViews.append(imageScrollView)

                imageScrollView.maximumZoomScale = 2

                imageScrollView.minimumZoomScale = 1

                imageScrollView.delegate = self

                imageScrollView.tag = 2

                var imageView = UIImageView()

                

                imageViews.append(imageView)

                //添加雙擊事件

                let imageViewTaget = UITapGestureRecognizer(target:self, action: "imageViewTagetAction")

                imageViewTaget.numberOfTapsRequired = 2

                imageViewTaget.numberOfTouchesRequired  = 1

                imageView.userInteractionEnabled = true

                imageView.addGestureRecognizer(imageViewTaget)

                

                imageView.sd_setImageWithURL(NSURL(string: course.photosurl)!, placeholderImage: UIImage(named: "default_avatar_no_border"), completed: { (image, errir, cacheType, url) -> Void in

                    weak var this = self

                    

                    self.addImageScroll(imageView,imageScrollView:imageScrollView,page:page,photodescription:course.photodescription)

                })

                

                //                        imageView.bounds = CGRectMake(0, 0, self.view.frame.width, 0)

                //            imageView.contentMode = UIViewContentMode.ScaleToFill

                //            imageView.contentMode = UIViewContentMode.ScaleAspectFit

                //                imageView.contentMode = UIViewContentMode.ScaleAspectFill

                //            imageView.contentMode = UIViewContentMode.TopLeft

                

                

                

            }

        }

        

        

        

    }

//    //滾動 觸發

//    func scrollViewDidScroll(scrollView: UIScrollView) {

//        if scrollView.tag == 1{

//            debugPrint("asdfasdfas")

//        }

//    }

//    //完成滾動時候調用

//    func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) {

//        if scrollView.tag == 1{

//            for item in scrollView.subviews{

//                item.removeFromSuperview()

//            }

//            for i in 0...(Int(count!) - 1){

//                scrollView.addSubview(pages[i])

//            }

//        }

//    }


    //縮放的事件

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

        if scrollView.tag == 2{

            for item in scrollView.subviews{

                if item.tag == 88{

                    scrollView.contentSize = CGSizeMake(scrollView.frame.width,scrollView.contentSize.height)

                    return item

                }else{

                    return nil

                }

            }

            return nil

        }else{

            return nil

        }

        

    }

    func addImageScroll(imageView:UIImageView,imageScrollView:UIScrollView,page:UIView,photodescription:String){

        let imageView_height = (self.view.frame.width/(imageView.image?.size.width)!) * (imageView.image?.size.height)!

        imageHeight.append(imageView_height)

        if imageView_height > self.view.frame.height{

            imageView.frame = CGRect(x: 0, y: 0,

                width: self.view.frame.width, height: imageView_height)

            imageScrollView.contentSize = CGSizeMake(imageScrollView.frame.width,imageView_height)

            

            imageBaseView = UIView(frame: CGRect(x: 0, y: 0,

                width: imageScrollView.frame.width, height: imageView.frame.height))

        }else{

            imageView.frame = CGRect(x: 0, y: (self.view.frame.height - imageView_height)/2,

                width: self.view.frame.width, height: imageView_height)

            imageBaseView = UIView(frame: CGRect(x: 0, y: 0,

                width: imageScrollView.frame.width, height: imageScrollView.frame.height))

        }

        

        imageBaseView.tag = 88

        imageBaseView.addSubview(imageView)

        imageScrollView.addSubview(imageBaseView)

        page.addSubview(imageScrollView)

        

        

        

        page.backgroundColor = UIColor.blackColor()

        

        page.frame = CGRect(x: CGFloat(iasdf) * self.view.frame.width, y: 0,

            width: self.view.frame.width + 200, height: self.view.frame.height)

        

        iasdf = iasdf + 1

        pages.append(page)

        scrollView.addSubview(page)

        

        //添加底部說明文字

        var buttomView = UIView(frame: CGRectMake(0, self.view.frame.height - 160, self.view.frame.width, 160))

        buttomView.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.5)

        //            buttomView.backgroundColor = UIColor.redColor()

        

        page.addSubview(buttomView)

        buttomViews.append(buttomView)

        var buttomScrollView = UIScrollView(frame: CGRectMake(10, 10, self.view.frame.width - buttomView_right - 10, buttomView_height))

        buttomScrollView.backgroundColor = UIColor.clearColor()

        //            buttomScrollView.backgroundColor = UIColor.blueColor()

        buttomView.addSubview(buttomScrollView)

        var buttomLabel = UILabel(frame: CGRectMake(0, 0, buttomScrollView.frame.width, buttomView_height))

        buttomLabel.backgroundColor = UIColor.clearColor()

        buttomLabel.textColor = UIColor.whiteColor()

        buttomLabel.font = UIFont.systemFontOfSize(worldSize)

        buttomLabel.numberOfLines = 0

        buttomLabel.text = photodescription

        buttomLabel.sizeToFit()

        buttomScrollView.contentSize = CGSizeMake(buttomScrollView.frame.width,buttomLabel.frame.height)

        buttomScrollView.showsHorizontalScrollIndicator = false

        buttomScrollView.showsVerticalScrollIndicator = false

        buttomScrollView.addSubview(buttomLabel)

        

        //添加第幾張圖的字

        var numberOfLabel = UILabel(frame: CGRectMake(buttomView.frame.width - 10, 10, 0, worldSize))

        numberOfLabel.textColor = UIColor(red: 255, green: 246, blue: 0, alpha: 1)

        numberOfLabel.font = UIFont.systemFontOfSize(worldSize)

        numberOfLabel.text = "\(iasdf)/\(count!)"

        numberOfLabel.sizeToFit()

        numberOfLabel.frame = CGRect(x: buttomView.frame.width - 10 - numberOfLabel.frame.width, y: 10, width: numberOfLabel.frame.width, height: numberOfLabel.frame.height)

        buttomView.addSubview(numberOfLabel)

    }

    func imageViewTagetAction(){


    }

    

    func scrollViewAction(){


        if isOrNo{

            for i in 0...(Int(count!) - 1){

                buttomViews[i].hidden = true

            }

            bar.hidden = true

            isOrNo = !isOrNo

        }else{

            for i in 0...(Int(count!) - 1){

                buttomViews[i].hidden = false

            }

            bar.hidden = false

            isOrNo = !isOrNo

        }

        

    }

    func addNAvigation(){

        bar = UIView(frame: CGRectMake(0, 0, self.view.frame.width, 64))

        bar.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0)

        

        let leftButton:UIButton  = UIButton(type: UIButtonType.Custom)

        leftButton.frame = CGRectMake(7, 20, 43, 44)

        leftButton.setImage(UIImage(named: "back_white_2015_8_31"), forState: UIControlState.Normal)

        leftButton.titleLabel?.font = UIFont.systemFontOfSize(17)

        leftButton.addTarget(self, action: "onNavigationBarLeftButtonClick", forControlEvents: UIControlEvents.TouchUpInside)

        bar.addSubview(leftButton)

        

//        bar.hidden = true

        self.view.addSubview(bar)

        

    }

    override func onNavigationBarLeftButtonClick() {

        self.dismissViewControllerAnimated(false, completion: nil)

        

    }

    

    //調整statusbar顏色

    override func preferredStatusBarStyle() -> UIStatusBarStyle {

        return UIStatusBarStyle.LightContent

        

    }

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

    }

    

    

    

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章