versión Swift
Añada las siguientes propiedades
var offSet: CGFloat = 0
@IBOutlet weak var imagePageControl: UIPageControl!
@IBOutlet weak var imageScrollView: UIScrollView!
let imageArray = [your images]
modificar el viewDidLoad()
override func viewDidLoad() {
super.viewDidLoad()
self.offSet = 0
let timer = Timer.scheduledTimer(timeInterval: 8, target: self, selector: #selector(autoScroll), userInfo: nil, repeats: true)
imagePageControl.numberOfPages = bannerArray.count
imageScrollView.isPagingEnabled = true
imageScrollView.contentSize.height = 200
imageScrollView.contentSize.width = self.view.bounds.width * CGFloat(bannerArray.count)
imageScrollView.showsHorizontalScrollIndicator = false
imageScrollView.delegate = self
for (index, image) in imageArray.enumerated() {
let image = image
let imageView = UIImageView(image: image)
imageView.contentMode = .scaleAspectFill
imageView.frame.size.width = self.view.bounds.size.width
imageView.frame.size.height = 200
imageView.frame.origin.x = CGFloat(index) * self.view.bounds.size.width
imageScrollView.addSubview(imageView)
}
}
crear esta función de desplazamiento automático
func autoScroll() {
let totalPossibleOffset = CGFloat(imageArray.count - 1) * self.view.bounds.size.width
if offSet == totalPossibleOffset {
offSet = 0 // come back to the first image after the last image
}
else {
offSet += self.view.bounds.size.width
}
DispatchQueue.main.async() {
UIView.animate(withDuration: 0.3, delay: 0, options: UIViewAnimationOptions.curveLinear, animations: {
self.imageScrollView.contentOffset.x = CGFloat(self.offSet)
}, completion: nil)
}
}
Añadir esta función para desplazamiento manual de
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let page = scrollView.contentOffset.x/scrollView.frame.size.width
imagePageControl.currentPage = Int(page)
self.offSet = page * scrollView.frame.size.width // this updates offset value so that automatic scroll begins from the image you arrived at manually
}
Nota: Aunque la pregunta es específica de desplazamiento automático, he añadido desplazamiento manual, así. De modo que tanto el desplazamiento automático como el desplazamiento manual funcionan en tándem. Además, he agregado un UIPageControl
. Por favor, elimine el imagePageControl
si no lo necesita.
su no desplazarse sin problemas .. –
Para animar suavemente el rollo, utilizar este método: '[yourScrollView setContentOffset: CGPointMake (0, h) animada: YES];' – henryeverett
se lo int tipo de variable H ?? –