Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Scroll Cell of UICollectionView to Left & Right direction by clicking on left & right button action

I have requirement to make the UICollectionView Cell to be scroll to next 5 items from array by clicking on "right" button and show previous 5 times by clicking on "left button".

enter image description here

Can anyone help me by giving any suggestion to make it possbile in swift.

below is the code written, To show list on collection view in horizontal scroll.

override func viewDidLoad() {

        super.viewDidLoad()

        self.arrFalconList = ["ic_falcon_1","ic_falcon_2","ic_falcon_3","ic_falcon_4","ic_falcon_5","ic_falcon_6","ic_falcon_7"]
    }



func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return self.arrFalconList.count
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        let aFalconCell = collectionView.dequeueReusableCell(withReuseIdentifier: "FalconCollectionViewCell", for: indexPath) as! FalconCollectionViewCell

        aFalconCell.imgFalcon.image = UIImage(named: self.arrFalconList[indexPath.row])
        aFalconCell.lblFalcon.text = self.arrFalconList[indexPath.row]
        aFalconCell.imgFalcon.layer.cornerRadius = ((aFalconCell.imgFalcon.frame.width) / 2)
        aFalconCell.imgFalcon.clipsToBounds = true

        if aFalconCell.isSelected {
            aFalconCell.imgFalcon.layer.borderColor = UIColor.init(red: 241.0/255.0, green: 55.0/255.0, blue: 61.0/255.0, alpha: 1.0).cgColor
            aFalconCell.imgFalcon.layer.borderWidth = 2
        }else{
            aFalconCell.imgFalcon.layer.borderColor = UIColor.clear.cgColor
            aFalconCell.imgFalcon.layer.borderWidth = 0
        }


        return aFalconCell

    }

Please share your answer to handle the "left" & "right" button click event.

like image 253
Akash Thakkar Avatar asked Nov 28 '22 00:11

Akash Thakkar


1 Answers

I have found the solution for the query.

Below code will helpful to achive the requirement.

@IBAction func btnLeftArrowAction(_ sender: Any) {
        let collectionBounds = self.collectionView.bounds
        let contentOffset = CGFloat(floor(self.collectionView.contentOffset.x - collectionBounds.size.width))
        self.moveCollectionToFrame(contentOffset: contentOffset)

    }

    @IBAction func btnRightArrowAction(_ sender: Any) {

        let collectionBounds = self.collectionView.bounds
        let contentOffset = CGFloat(floor(self.collectionView.contentOffset.x + collectionBounds.size.width))
        self.moveCollectionToFrame(contentOffset: contentOffset)

    }

    func moveCollectionToFrame(contentOffset : CGFloat) {

        let frame: CGRect = CGRect(x : contentOffset ,y : self.collectionView.contentOffset.y ,width : self.collectionView.frame.width,height : self.collectionView.frame.height)
        self.collectionView.scrollRectToVisible(frame, animated: true)
    }
like image 173
Akash Thakkar Avatar answered Dec 05 '22 02:12

Akash Thakkar