Anonymous
Слайд-шоу изображений Swift ios
Сообщение
Anonymous » 08 янв 2026, 21:05
Я новичок в разработке для iOS. Я пытаюсь сделать простое полноэкранное слайд-шоу изображений. При пролистывании влево слайд-шоу должно показывать следующее изображение, а при пролистывании вправо слайд-шоу должно показывать предыдущее изображение.
У меня это работает, однако, если я быстро проведу пальцем по экрану, я получаю пустой экран, как будто анимация не поспевает, а затем, когда я подожду немного и снова проведу пальцем по экрану, просмотр изображений ускорится и снова будет работать нормально. Есть идеи, что я делаю неправильно? Как лучше всего реализовать подобную карусель изображений с динамическим количеством изображений (здесь они жестко запрограммированы)?
Код: Выделить всё
import UIKit
var imageArr = ["imageOne.jpg", "imageTwo.jpg", "imageThree.jpg", "imageFour.jpg", "imageFive.jpg"]
var imageIndex = 0;
class ViewController: UIViewController {
var currImage = UIImageView()
var rightImage = UIImageView()
var leftImage = UIImageView()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
var bounds:CGRect = UIScreen.mainScreen().bounds
var width:CGFloat = bounds.size.width
var height:CGFloat = bounds.size.height
currImage.frame = CGRect(x: 0.0, y: 0.0, width: width, height: height)
currImage.image = UIImage(named: imageArr[imageIndex])
rightImage.frame = CGRect(x: width, y: 0.0, width: width, height: height)
rightImage.image = UIImage(named: imageArr[imageIndex + 1])
leftImage.frame = CGRect(x: -width, y: 0.0, width: width, height: height)
leftImage.image = UIImage(named: imageArr[imageArr.count - 1])
self.view.addSubview(currImage)
self.view.addSubview(rightImage)
self.view.addSubview(leftImage)
var swipeLeft = UISwipeGestureRecognizer(target: self, action: "handleSwipe:")
swipeLeft.direction = UISwipeGestureRecognizerDirection.Left
self.view.addGestureRecognizer(swipeLeft)
var swipeRight = UISwipeGestureRecognizer(target: self, action: "handleSwipe:")
swipeRight.direction = UISwipeGestureRecognizerDirection.Right
self.view.addGestureRecognizer(swipeRight)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
let transitionManager = TransitionManager()
func handleSwipe(gesture: UIGestureRecognizer) {
var bounds:CGRect = UIScreen.mainScreen().bounds
var width:CGFloat = bounds.size.width
var height:CGFloat = bounds.size.height
if let swipeGesture = gesture as? UISwipeGestureRecognizer {
if (swipeGesture.direction == UISwipeGestureRecognizerDirection.Left ) {
UIView.animateWithDuration(0.5, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0.2, options: UIViewAnimationOptions.CurveEaseIn, animations: {
self.currImage.frame = CGRect(x: -width, y: 0.0, width: width, height: height)
self.rightImage.frame = CGRect(x: 0.0, y:0.0, width: width, height: height)
}, completion: { finished in
if (!finished) { return }
imageIndex++
imageIndex = imageIndex imageArr.count - 1 ? 0 : imageIndex + 1
self.rightImage.image = UIImage(named: imageArr[rightIndex])
})
}
if (swipeGesture.direction == UISwipeGestureRecognizerDirection.Right) {
UIView.animateWithDuration(0.5, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0.2, options: UIViewAnimationOptions.CurveEaseIn, animations: {
self.currImage.frame = CGRect(x: width, y: 0.0, width: width, height: height)
self.leftImage.frame = CGRect(x: 0.0, y: 0.0, width: width, height: height)
}, completion: { finished in
imageIndex--
imageIndex = imageIndex < 0 ? imageArr.count - 1 : imageIndex
var rightIndex = imageIndex + 1 > imageArr.count - 1 ? 0 : imageIndex + 1
self.rightImage.image = UIImage(named: imageArr[rightIndex])
self.rightImage.frame = CGRect(x: width, y: 0.0, width: width, height: height)
var tempImg = self.currImage
self.currImage = self.tempImg
self.leftImage = tempCurr
self.leftImage.frame = CGRect(x: -width, y: 0.0, width: width, height: height)
var leftIndex = imageIndex - 1 < 0 ? imageArr.count - 1 : imageIndex - 1
self.leftImage.image = UIImage(named: imageArr[leftIndex])
})
}
}
}
}
Любая помощь приветствуется!
Подробнее здесь:
https://stackoverflow.com/questions/286 ... -swift-ios
1767895530
Anonymous
Я новичок в разработке для iOS. Я пытаюсь сделать простое полноэкранное слайд-шоу изображений. При пролистывании влево слайд-шоу должно показывать следующее изображение, а при пролистывании вправо слайд-шоу должно показывать предыдущее изображение. У меня это работает, однако, если я быстро проведу пальцем по экрану, я получаю пустой экран, как будто анимация не поспевает, а затем, когда я подожду немного и снова проведу пальцем по экрану, просмотр изображений ускорится и снова будет работать нормально. Есть идеи, что я делаю неправильно? Как лучше всего реализовать подобную карусель изображений с динамическим количеством изображений (здесь они жестко запрограммированы)? [code]import UIKit var imageArr = ["imageOne.jpg", "imageTwo.jpg", "imageThree.jpg", "imageFour.jpg", "imageFive.jpg"] var imageIndex = 0; class ViewController: UIViewController { var currImage = UIImageView() var rightImage = UIImageView() var leftImage = UIImageView() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. var bounds:CGRect = UIScreen.mainScreen().bounds var width:CGFloat = bounds.size.width var height:CGFloat = bounds.size.height currImage.frame = CGRect(x: 0.0, y: 0.0, width: width, height: height) currImage.image = UIImage(named: imageArr[imageIndex]) rightImage.frame = CGRect(x: width, y: 0.0, width: width, height: height) rightImage.image = UIImage(named: imageArr[imageIndex + 1]) leftImage.frame = CGRect(x: -width, y: 0.0, width: width, height: height) leftImage.image = UIImage(named: imageArr[imageArr.count - 1]) self.view.addSubview(currImage) self.view.addSubview(rightImage) self.view.addSubview(leftImage) var swipeLeft = UISwipeGestureRecognizer(target: self, action: "handleSwipe:") swipeLeft.direction = UISwipeGestureRecognizerDirection.Left self.view.addGestureRecognizer(swipeLeft) var swipeRight = UISwipeGestureRecognizer(target: self, action: "handleSwipe:") swipeRight.direction = UISwipeGestureRecognizerDirection.Right self.view.addGestureRecognizer(swipeRight) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } let transitionManager = TransitionManager() func handleSwipe(gesture: UIGestureRecognizer) { var bounds:CGRect = UIScreen.mainScreen().bounds var width:CGFloat = bounds.size.width var height:CGFloat = bounds.size.height if let swipeGesture = gesture as? UISwipeGestureRecognizer { if (swipeGesture.direction == UISwipeGestureRecognizerDirection.Left ) { UIView.animateWithDuration(0.5, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0.2, options: UIViewAnimationOptions.CurveEaseIn, animations: { self.currImage.frame = CGRect(x: -width, y: 0.0, width: width, height: height) self.rightImage.frame = CGRect(x: 0.0, y:0.0, width: width, height: height) }, completion: { finished in if (!finished) { return } imageIndex++ imageIndex = imageIndex imageArr.count - 1 ? 0 : imageIndex + 1 self.rightImage.image = UIImage(named: imageArr[rightIndex]) }) } if (swipeGesture.direction == UISwipeGestureRecognizerDirection.Right) { UIView.animateWithDuration(0.5, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0.2, options: UIViewAnimationOptions.CurveEaseIn, animations: { self.currImage.frame = CGRect(x: width, y: 0.0, width: width, height: height) self.leftImage.frame = CGRect(x: 0.0, y: 0.0, width: width, height: height) }, completion: { finished in imageIndex-- imageIndex = imageIndex < 0 ? imageArr.count - 1 : imageIndex var rightIndex = imageIndex + 1 > imageArr.count - 1 ? 0 : imageIndex + 1 self.rightImage.image = UIImage(named: imageArr[rightIndex]) self.rightImage.frame = CGRect(x: width, y: 0.0, width: width, height: height) var tempImg = self.currImage self.currImage = self.tempImg self.leftImage = tempCurr self.leftImage.frame = CGRect(x: -width, y: 0.0, width: width, height: height) var leftIndex = imageIndex - 1 < 0 ? imageArr.count - 1 : imageIndex - 1 self.leftImage.image = UIImage(named: imageArr[leftIndex]) }) } } } } [/code] Любая помощь приветствуется! Подробнее здесь: [url]https://stackoverflow.com/questions/28689383/image-slideshow-swift-ios[/url]