NSTimer Проблемы с автоматическим запуском слайд-шоу изображений - PullRequest
0 голосов
/ 22 февраля 2019

Я обнаружил проблемы при попытке запустить слайд-шоу изображений в моем приложении после запуска заставки.По какой-то причине слайд-шоу изображений начинается слишком долго. Мне пришлось нажать либо предыдущую, либо следующую кнопку, либо мой UISlider, чтобы отобразить слайд-шоу, после чего приложение вылетает.Что-то не так или отсутствует в моем коде?Цель - запустить слайд-шоу изображений автоматически.Вот мой код ниже.Кроме того, у меня есть снимок экрана с настройкой слайд-шоу моего изображения по ссылке ниже.

Image Slideshow Setup

var Array = [UIImage]()
var counter = 2
var time = Timer()


@IBOutlet weak var menuButton: UIBarButtonItem!
@IBOutlet weak var ImageView: UIImageView!
@IBOutlet weak var Slider1: UISlider!
@IBAction func Slider(_ sender: UISlider) {
    _ = 0
    let value = Int(sender.value)
    ImageView.image = Array[value]
}

@IBAction func NextButton(_ sender: Any) {
    Slider1.value += 1
    ImageView.image = Array[Int(Slider1.value)]
    self.ImageView.animationImages = self.Array
    self.ImageView.animationDuration = 3.0
    self.ImageView.animationRepeatCount = 0
    self.ImageView.startAnimating()

    UIView.transition(with: self.ImageView, duration: 5.0, options: .transitionCrossDissolve, animations: {self.ImageView.image = self.ImageView.image}, completion: nil)

}


@IBAction func PrevButton(_ sender: Any) {
    Slider1.value -= 1
    ImageView.image = Array[Int(Slider1.value)]
    self.ImageView.animationImages = self.Array
    self.ImageView.animationDuration = 3.0
    self.ImageView.animationRepeatCount = 0
    self.ImageView.startAnimating()

    UIView.transition(with: self.ImageView, duration: 5.0, options: .transitionCrossDissolve, animations: {self.ImageView.image = self.ImageView.image}, completion: nil)
}

 //Set Status Bar to light content (white)
override var preferredStatusBarStyle : UIStatusBarStyle {
    return .lightContent
}

override func viewDidLoad() {
    //Set Navigation Bar color Example Home, Back button
    self.navigationItem.backBarButtonItem?.tintColor = UIColor.white;

   time = Timer.scheduledTimer(timeInterval: 5,
                        target: self,
                        selector: #selector(getter: self.Slider1),
                        userInfo: nil,
                        repeats: true)
super.viewDidLoad()

setup()

   Array = [#imageLiteral(resourceName: "MainImage1.jpg"), #imageLiteral(resourceName: "MainImage2.jpg"), #imageLiteral(resourceName: "MainPage3.jpg"), #imageLiteral(resourceName: "MainImage4.jpg"), #imageLiteral(resourceName: "MainImage5.jpg"), #imageLiteral(resourceName: "MainImage6.jpg"), #imageLiteral(resourceName: "MainImage7.jpg"), #imageLiteral(resourceName: "MainImage8.jpg")]

    sideMenus()

    // Do any additional setup after loading the view.
}


override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func setup(){
self.navigationController?.navigationBar.tintColor = UIColor.white
}

override var prefersStatusBarHidden: Bool{
    return false
}

var navigationBarAppearace = UINavigationBar.appearance()
 override func viewDidAppear(_ animated: Bool){
}



func sideMenus() {

    if revealViewController() != nil {

        menuButton.target = revealViewController()
        menuButton.action = #selector(SWRevealViewController.revealToggle(_:))
        revealViewController().rearViewRevealWidth = 275
        revealViewController().rightViewRevealWidth = 160

        view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
    }
}
    }` 

1 Ответ

0 голосов
/ 22 февраля 2019

Селектор цели таймера - это функция, которая вызывается в указанный вами интервал.В приведенном выше коде вы используете метод получения для своего свойства ползунка в качестве функции для вызова таймера - это не делает то, что вы хотите.Таймер будет вызывать этот метод получения каждые 5 секунд, но все, что делает функция получения, это просто «получает» значение свойства ползунка.

Вы хотите, чтобы селектор таймера установил do что-тодля вас, например, чтобы вызвать функцию «следующий» кнопки.Почему бы не использовать форму создания таймера, которая позволяет указать замыкание для переноса поведения?Что-то вроде:

time = Timer.scheduledTimer(withTimeInterval: 5, repeats: true) { _ in
    self.NextButton(self)
}

(Это кажется более элегантным в Swift, чем использование #selector для указания на objc доступную функцию в любом случае.)

...