質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

922閲覧

UILabel・UIImageを常に更新したい。

rea_sna

総合スコア32

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/01/14 11:56

[したいこと]
曲が変わるたびに、自動的にImageとLabel(曲名、アーティスト、アルバム名)が更新されるようにしたい。

(コメントアウト部分は気にしないでください)

Swift

1コード 2 3 4 5import UIKit 6import MediaPlayer 7 8 9 10 11class PlayViewController: UIViewController, MPMediaPickerControllerDelegate { 12 13 var player: MPMusicPlayerController! 14 15 16 @IBOutlet weak var imageView: UIImageView! 17 @IBOutlet weak var albumView: UILabel! 18 @IBOutlet weak var artistView: UILabel! 19 @IBOutlet weak var songView: UILabel! 20 21 22 23 24 override func didReceiveMemoryWarning() { 25 super.didReceiveMemoryWarning() 26 } 27 28 29 30 31 32 33 34 override func viewDidLoad() { 35 super.viewDidLoad() 36 37 38 39 40 41 42 43 // imageView.layer.shadowOffset = CGSize(width: 2, height: 2) 44 // imageView.layer.shadowOpacity = 2 45 // imageView.layer.shadowColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1) 46 // imageView.layer.shadowRadius = 6 47 48 49 50 51 52 53 54 55 player = MPMusicPlayerController.systemMusicPlayer 56 player.repeatMode = .none 57 58 59 60 player = MPMusicPlayerController.applicationMusicPlayer 61 62 player = MPMusicPlayerController.systemMusicPlayer 63 64 // 通知センター 65 let notification = NotificationCenter.default 66 67 // // 再生中の曲が変わったことを検知する 68 // notification.addObserver(self, selector: #selector(MPMusicPlayerController.self), name: NSNotification.Name.MPMusicPlayerControllerNowPlayingItemDidChange, object: nil) 69 // 70 // func (MPMusicPlayerController.self) 71 72 73 // 音楽再生の場合、これをしないと通知されない!! 74 player.beginGeneratingPlaybackNotifications() 75 // 通知が不要になったらend〜を呼び出す 76 //player.endGeneratingPlaybackNotifications() 77 78 79 //現在再生中の音楽を表示 80 let playing = player.nowPlayingItem 81 // player.skipToBeginning() 82 83 // 選択した曲から最初の曲の情報を表示 84 if let mediaItem = playing { 85 let playstatus = player.playbackState 86 if playstatus == .stopped { 87 updateSongInformationUI(mediaItem : mediaItem) 88 // player.stop() 89 // print("stop") 90 } else if playstatus == .paused { 91 updateSongInformationUI(mediaItem : mediaItem) 92 // player.stop() 93 // print("pause") 94 } else { 95 updateSongInformationUI(mediaItem : mediaItem) 96 // player.stop() 97 // print("playing") 98 } 99 } else { 100 //曲が選択されていない場合、全楽曲セットする 101 let query = MPMediaQuery.songs() 102 player.setQueue(with: query) 103 player.play() 104 } 105 106 func selecter(_ :UIButton){ 107 // MPMediaPickerControllerのインスタンスを作成 108 let picker = MPMediaPickerController() 109 // ピッカーのデリゲートを設定 110 picker.delegate = self 111 // 複数選択にする。(falseにすると、単数選択になる) 112 picker.allowsPickingMultipleItems = false 113 // ピッカーを表示する 114 present(picker, animated: true, completion: nil) 115 } 116 117 118 119 120 //通知 121 if #available(iOS 10.0, *) { 122 // iOS 10 123 let center = UNUserNotificationCenter.current() 124 center.requestAuthorization(options: [.badge, .sound, .alert], completionHandler: { (granted, error) in 125 if error != nil { 126 return 127 } 128 129 if granted { 130 print("通知許可") 131 132 let center = UNUserNotificationCenter.current() 133 134 135 } else { 136 print("通知拒否") 137 } 138 }) 139 140 } else { 141 // iOS 9以下 142 let settings = UIUserNotificationSettings(types: [.badge, .sound, .alert], categories: nil) 143 UIApplication.shared.registerUserNotificationSettings(settings) 144 } 145 146// //再生 147// func play(_ :UIButton){ 148// player.play() 149// 150// } 151// 152// 153// //一時停止 154// func pause(_ :UIButton){ 155// player.pause() 156// 157// } 158 159 160 // //リピート有効 161 // func ChangeRepeat(_ : UISwitch){ 162 // player.repeatMode = .one 163 // 164 // 165 // } 166 // 167 // //リピート無効 168 // func ChangeRepeatStop(_ : UISwitch){ 169 // player.repeatMode = .none 170 // 171 // } 172 } 173 174 175 176 // 曲情報を表示する 177 func updateSongInformationUI(mediaItem: MPMediaItem) { 178 179 180 181 182 // 曲情報表示 183 artistView.text = mediaItem.artist ?? "不明なアーティスト" 184 albumView.text = mediaItem.albumTitle ?? "不明なアルバム" 185 songView.text = mediaItem.title ?? "不明な曲" 186 187 // アートワーク表示 188 if let artwork = mediaItem.artwork { 189 let image = artwork.image(at: imageView.bounds.size) 190 imageView.image = image 191 } else { 192 // アートワークがないとき 193 imageView.image = nil 194 imageView.backgroundColor = .gray 195 } 196 197 func updateUI() { 198 print("更新完了") 199 } 200 201 202 } 203 204 205 206 207 208 209 //画面遷移・・・戻る 210 @IBAction func back() { 211 self.dismiss(animated: true, completion: nil) 212 213 } 214 215 216} 217 218 219

イメージ説明
画面です。アートワーク部分のタップで、前の画面へ。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takabosoft

2020/01/15 08:44

曲が変わる度(?)に、updateSongInformationUIを呼べばよさそうに見えますが、どこでつまずいているのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問