Hi, Ich bin neu hier und auch neu bei Swift bzw. Xcode.
Hier zu meiner Frage:
Diesen ImageSlider habe ich in meiner App implementiert: youtube.com/watch?v=n9NhtI2XlGM
Er funktioniert wunderbar. Jetzt möchte ich diesen aber noch erweitern.
Dazu brauche in ein weiteres Array, somit sind es zwei. "imgArr" speichert weiterhin (wie im Original) die Dateinamen der Bilder. Neu hinzugekommen ist "welcheNote". Dieses Array soll nur einen Buchstaben speichern wie "E" or "F".
Jetzt möchte ich wenn das erste Bild angezeigt wird (imgArr[1]), den Text von welcheNote[1] zusätzlich anzeigen lassen. Bei imgArr[2] soll demzufolge welcheNote[2] angezeigt werden usw.
Was nun nicht klappt ist herauszubekommen welches Bild gerade angezeigt wird. Ich suche als das x in imgArr[x].
Bisher probiert habe ich das so: note.text = welcheNote[indexPath.row] innerhalb func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {} -> siehe Code unten.
indexPath[row] liefert allerdings merkwürdige Werte. Am Anfang ist es 0, was ja auch stimmt, aber schon beim ersten Swipe wird indexPath[row] direkt 2, sollte aber natürlich 1 sein.
EDIT: Vielleicht sollte ich noch dazusagen, dass die Bilder in einem UIImageView in einer UICollectionViewCell angezeigt werden (im Storyboard eingerichtet) . Es gibt noch eine weitere Datei mit dem Namen "DataCollectionViewCell.swift" und dem Inhalt:
import UIKit
class DataCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var img: UIImageView!
}
Ich denke, dass dies keine wichtige info ist und dass das Problem im unten angezeigten Code liegt.
Ich habe schon Stunden damit verbracht und komme aber auf keinen grünen Zweig. Kann mit jemand helfen?
Hier der Code:
import UIKit
import AVFoundation
class Altissimo: UIViewController {
var imgArr = [UIImage(named: "altissimoE"),
UIImage(named: "altissimoF"),
UIImage(named: "altissimoFis"),
UIImage(named: "altissimoFis2"),
UIImage(named: "altissimoG"),
UIImage(named: "altissimoGis"),
UIImage(named: "altissimoA"),
UIImage(named: "altissimoBb"),
UIImage(named: "altissimoB"),
UIImage(named: "altissimoC"),
UIImage(named: "altissimoCis"),
UIImage(named: "altissimoD"),
UIImage(named: "altissimoEb"),
UIImage(named: "altissimoEhigh"),
UIImage(named: "altissimoFhigh")
]
var welcheNote = ["E", "F", "F#", "G", "G#", "A", "Bb", "B", "C", "C#", "D", "Eb", "E", "F"]
let avPlayer = AVPlayer()
var pathToDrone: String = "A440HzOrgel"
@IBOutlet weak var colltionView: UICollectionView!
@IBOutlet weak var note: UILabel!
@IBOutlet weak var playButtonFingerings: UIButton!
@IBAction func playButtonActionFingerings(_ sender: UIButton) {
if playButtonFingerings.currentBackgroundImage == UIImage(named: "play") {
playButtonFingerings.setBackgroundImage(UIImage(named: "pause"), for: .normal)
let path = Bundle.main.path(
forResource: pathToDrone, ofType: "mp3")!
let url = URL(fileURLWithPath: path)
let ava = AVAsset(url: url)
let avItem = AVPlayerItem(asset: ava)
avPlayer.replaceCurrentItem(with: avItem)
avPlayer.play()
} else {
playButtonFingerings.setBackgroundImage(UIImage(named: "play"), for: .normal)
avPlayer.pause()
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
extension Altissimo: UICollectionViewDelegate, UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return imgArr.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
print(indexPath.row)
note.text = welcheNote[indexPath.row]
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as? DataCollectionViewCell
cell?.img.image = imgArr[indexPath.row]
return cell!
}
}
extension Altissimo: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let size = UIScreen.main.bounds
return CGSize(width: size.width, height: size.height)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 0
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 0
}
}
Hier zu meiner Frage:
Diesen ImageSlider habe ich in meiner App implementiert: youtube.com/watch?v=n9NhtI2XlGM
Er funktioniert wunderbar. Jetzt möchte ich diesen aber noch erweitern.
Dazu brauche in ein weiteres Array, somit sind es zwei. "imgArr" speichert weiterhin (wie im Original) die Dateinamen der Bilder. Neu hinzugekommen ist "welcheNote". Dieses Array soll nur einen Buchstaben speichern wie "E" or "F".
Jetzt möchte ich wenn das erste Bild angezeigt wird (imgArr[1]), den Text von welcheNote[1] zusätzlich anzeigen lassen. Bei imgArr[2] soll demzufolge welcheNote[2] angezeigt werden usw.
Was nun nicht klappt ist herauszubekommen welches Bild gerade angezeigt wird. Ich suche als das x in imgArr[x].
Bisher probiert habe ich das so: note.text = welcheNote[indexPath.row] innerhalb func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {} -> siehe Code unten.
indexPath[row] liefert allerdings merkwürdige Werte. Am Anfang ist es 0, was ja auch stimmt, aber schon beim ersten Swipe wird indexPath[row] direkt 2, sollte aber natürlich 1 sein.
EDIT: Vielleicht sollte ich noch dazusagen, dass die Bilder in einem UIImageView in einer UICollectionViewCell angezeigt werden (im Storyboard eingerichtet) . Es gibt noch eine weitere Datei mit dem Namen "DataCollectionViewCell.swift" und dem Inhalt:
import UIKit
class DataCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var img: UIImageView!
}
Ich denke, dass dies keine wichtige info ist und dass das Problem im unten angezeigten Code liegt.
Ich habe schon Stunden damit verbracht und komme aber auf keinen grünen Zweig. Kann mit jemand helfen?
Hier der Code:
import UIKit
import AVFoundation
class Altissimo: UIViewController {
var imgArr = [UIImage(named: "altissimoE"),
UIImage(named: "altissimoF"),
UIImage(named: "altissimoFis"),
UIImage(named: "altissimoFis2"),
UIImage(named: "altissimoG"),
UIImage(named: "altissimoGis"),
UIImage(named: "altissimoA"),
UIImage(named: "altissimoBb"),
UIImage(named: "altissimoB"),
UIImage(named: "altissimoC"),
UIImage(named: "altissimoCis"),
UIImage(named: "altissimoD"),
UIImage(named: "altissimoEb"),
UIImage(named: "altissimoEhigh"),
UIImage(named: "altissimoFhigh")
]
var welcheNote = ["E", "F", "F#", "G", "G#", "A", "Bb", "B", "C", "C#", "D", "Eb", "E", "F"]
let avPlayer = AVPlayer()
var pathToDrone: String = "A440HzOrgel"
@IBOutlet weak var colltionView: UICollectionView!
@IBOutlet weak var note: UILabel!
@IBOutlet weak var playButtonFingerings: UIButton!
@IBAction func playButtonActionFingerings(_ sender: UIButton) {
if playButtonFingerings.currentBackgroundImage == UIImage(named: "play") {
playButtonFingerings.setBackgroundImage(UIImage(named: "pause"), for: .normal)
let path = Bundle.main.path(
forResource: pathToDrone, ofType: "mp3")!
let url = URL(fileURLWithPath: path)
let ava = AVAsset(url: url)
let avItem = AVPlayerItem(asset: ava)
avPlayer.replaceCurrentItem(with: avItem)
avPlayer.play()
} else {
playButtonFingerings.setBackgroundImage(UIImage(named: "play"), for: .normal)
avPlayer.pause()
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
extension Altissimo: UICollectionViewDelegate, UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return imgArr.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
print(indexPath.row)
note.text = welcheNote[indexPath.row]
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as? DataCollectionViewCell
cell?.img.image = imgArr[indexPath.row]
return cell!
}
}
extension Altissimo: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let size = UIScreen.main.bounds
return CGSize(width: size.width, height: size.height)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 0
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 0
}
}
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von lololarumpel ()