ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [UIKit] 시간에 따라 넘어가는 이미지 배너
    Swift/UIKit 2024. 1. 24. 21:45

     

     

    타이머 돌리고 이미지가 시간에 맞춰서 돌아가고, 페이징 기능(isPagingEnabled)가 있는 UIViewcontroller

     

     

    clipsToBounds 속성은 그대로 유지되어 이미지가 UIImageView의 경계를 넘어가지 않도록 합니다.

    import UIKit
    
    class ViewController: UIViewController {
        
        let scrollView = UIScrollView()
        let numberOfPages = 3
        let pageWidth: CGFloat = UIScreen.main.bounds.width
        let pageHeight: CGFloat = UIScreen.main.bounds.height
        
        var currentPage = 0
        var timer: Timer?
        let duration: TimeInterval = 1.0
        
        override func viewDidLoad() {
            super.viewDidLoad()
            
            scrollView.frame = CGRect(x: 0, y: 0, width: pageWidth, height: pageHeight)
            scrollView.isPagingEnabled = true
            scrollView.contentSize = CGSize(width: pageWidth * CGFloat(numberOfPages), height: pageHeight)
            scrollView.delegate = self
            view.addSubview(scrollView)
            
            for i in 0..<numberOfPages {
                let imageView = UIImageView()
                imageView.contentMode = .scaleAspectFit
                imageView.clipsToBounds = true
                imageView.frame = CGRect(x: pageWidth * CGFloat(i), y: 0, width: pageWidth, height: pageHeight)
                imageView.image = UIImage(named: "image\(i+1)") // 이미지 이름에 따라 변경해주세요.
                scrollView.addSubview(imageView)
            }
            
            startTimer()
        }
        
        func startTimer() {
            timer = Timer.scheduledTimer(timeInterval: duration, target: self, selector: #selector(scrollToNextPage), userInfo: nil, repeats: true)
        }
        
        func stopTimer() {
            timer?.invalidate()
            timer = nil
        }
        
        @objc func scrollToNextPage() {
            let nextPage = (currentPage + 1) % numberOfPages
            let offsetX = CGFloat(nextPage) * pageWidth
            scrollView.setContentOffset(CGPoint(x: offsetX, y: 0), animated: true)
        }
    }
    
    extension ViewController: UIScrollViewDelegate {
        func scrollViewDidScroll(_ scrollView: UIScrollView) {
            let contentOffsetX = scrollView.contentOffset.x
            let page = Int(contentOffsetX / pageWidth)
            currentPage = page
        }
        
        func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
            stopTimer()
        }
        
        func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
            startTimer()
        }
    }

     

     

    'Swift > UIKit' 카테고리의 다른 글

    scene, AppDelegate (iOS13 이후 도입)  (0) 2023.09.17
    iOS앱 라이프 사이클  (0) 2023.05.07
    화면전환 - 스토리보드 이용  (0) 2023.03.29
Designed by Tistory.