Хорошо, поэтому я пытаюсь создать «слайд-шоу», создав класс, который будет хранить массив из UIImages
, и иметь функцию, которая выбирает случайный индекс из массива и затем назначить ассоциированное изображение в представление изображения в ViewController.h
Изменение UIImageView.image с задержкой
import UIKit
import AVFoundation
class ViewController: UIViewController {
var audioPlayer = AVAudioPlayer()
var audioPath = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("1-08 Patient Love", ofType: "mp3")!)
var playPauseBtn = UIBarButtonItem()
var musicPaused: Bool = false
@IBOutlet var toolbar: UIToolbar!
@IBOutlet var bg1: UIImageView!
@IBOutlet var bg2: UIImageView!
@IBOutlet var bg3: UIImageView!
@IBOutlet var bg4: UIImageView!
@IBOutlet var bg5: UIImageView!
@IBOutlet var bg6: UIImageView!
@IBOutlet var bg7: UIImageView!
@IBOutlet var bg8: UIImageView!
@IBOutlet var bg9: UIImageView!
@IBOutlet var bg10: UIImageView!
@IBOutlet var bg11: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
do{
audioPlayer = try AVAudioPlayer(contentsOfURL: audioPath)}
catch {
print("Audio file not found.")
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func playPause(sender: UIBarButtonItem){
var items = toolbar.items!
if musicPaused == false {
playPauseBtn = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Pause, target: self, action: "playPause:")
items[0] = playPauseBtn
toolbar.setItems(items, animated: true)
audioPlayer.play()
musicPaused = true
}else{
var items = toolbar.items!
playPauseBtn = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Play, target: self, action: "playPause:")
items [0] = playPauseBtn
toolbar.setItems(items, animated: true)
audioPlayer.pause()
musicPaused = false
}
}
@IBAction func stopButton(sender: AnyObject) {
var items = toolbar.items!
audioPlayer.stop()
audioPlayer.currentTime = 0
playPauseBtn = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Play, target: self, action: "playPause:")
items[0] = playPauseBtn
toolbar.setItems(items, animated: true)
musicPaused = false
}
}
Это мой файл вид controller.swift. У меня нет ссылки еще функции Я пытаюсь написать в slideshow.swift файл здесь
import UIKit
var imageArray: [UIImage] = [
UIImage(named: "dec11.jpg")!,
UIImage(named: "dec18.jpg")!,
UIImage(named: "dec19.jpg")!,
UIImage(named: "dec19-2.jpg")!,
UIImage(named: "dec24.jpg")!,
UIImage(named: "dec25.jpg")!,
UIImage(named: "dec30.jpg")!,
UIImage(named: "jan1.jpg")!,
UIImage(named: "jan20.jpg")!,
UIImage(named: "jan24.jpg")!,
UIImage(named: "jan30.jpg")!
]
Класс слайд-шоу
class slideshow: NSObject {
func changeImage() -> UIImage{
//wait 2 secs
let seconds = 2.0
let delay = seconds * Double(NSEC_PER_SEC) // nanoseconds per seconds
let dispatchTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
dispatch_after(dispatchTime, dispatch_get_main_queue(), {
//here code perfomed with delay
//generate random number
let randomIndex = Int(arc4random_uniform(11))
var imageAtIndex = imageArray[randomIndex]
return imageAtIndex
})
}
}
было бы проще просто написать это все в порядке контроллер? Я изменил объявление функции в соответствии с предложением других пользователей, но я все равно получаю ту же ошибку.
Удивительный! Это, по крайней мере, показало мне изображение на экране. Затем я попытался добавить еще одну отправку после утверждения для задержки, а затем сделать ее рекурсивной. Это тоже не сработало. Идеи по этому поводу? – ChrisHooked
Нельзя ли вызывать 'changeImage()' после того, как вы установили изображение? Внутри 'dispatch_after' просто назовите' self.changeImage (imageViewToChange) ' – wottle