-
[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