[問題] 使用程式碼存取StackView中某個物件

看板MacDev作者 (SKY)時間5年前 (2019/06/26 02:38), 5年前編輯推噓0(110)
留言2則, 2人參與, 5年前最新討論串1/1
最近在寫一個iOS上的簡易節拍器作為練習, 目前的階段想要寫出一個指示燈在節拍器播放時會有對應的音符閃動。 如圖: https://imgur.com/iFDJ1cj
這是我用程式碼在一個StackView裡面放入四個音符ImageView,我希望在節拍器播放時 這四個音符會跟著由左到右一拍一拍跟著閃動。 以下為相關的Code: //在View裡新增一個StackView self.addSubview(stackView) //新增圖片到StackView,以此例來說,這段Code會重複執行4次以加入四個音符 func addNote() { let note4th = UIImageView(frame: CGRect(x: 0, y: 0, width: 60, height: 60)) note4th.image = UIImage(named: "4note") stackView.addArrangedSubview(note4th) } //讓音符閃動的func func animateObject(selected: Int){ let firstView = self.stackView.arrangedSubviews[selected] firstView.alpha = 0 UIView.animate(withDuration: 1) { () -> Void in firstView.alpha = 1 } } -- 我的設想是在每次節拍器到下一拍的同時呼叫上面的animateObject函式, 所以在我的想象中 第一拍時會呼叫 animateObject(selected: 0) 第二拍時會呼叫 animateObject(selected: 1) 第三拍時會呼叫 animateObject(selected: 2) 第四拍時會呼叫 animateObject(selected: 3) 但是不知道為什麼實際上StackView裡面的四個ImageView編號卻是2~5或是有時是3~6, 如示意圖: https://imgur.com/w77HTCg
也就是說實際上必須呼叫animateObject(selected: 2)才會讓左邊第一個音符閃動。 這裡讓我很疑惑stackView.arrangedSubviews的運作方式,StackView裡面只有四個物件, 編號為什麼不是從0開始排列呢? 並且如果我將節拍器停掉,重新再啟動的話(我有做一個啟動跟停止的按鈕) 這幾個音符圖片的編號也會完全跳到不知道幾號,就變成用上面的方式音符也完全 不會閃動。 請問以我的需求,使用arrangedSubviews這個語法來存取StackView某個物件是合理的嗎? 如果是的話,要怎麼樣才能夠讓StackView內物件的編號不要亂跳呢? 還是說有更適合的語法來達成我的目標呢? 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.231.131.188 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/MacDev/M.1561487931.A.A0A.html

06/26 03:34, 5年前 , 1F
viewWithTag(_:)
06/26 03:34, 1F

06/26 10:40, 5年前 , 2F
先設個中斷點看addNode被執行幾次?
06/26 10:40, 2F
謝謝,後來發現在啟動按鈕中執行了多餘的addNote ※ 編輯: homelife (61.231.130.131 臺灣), 06/28/2019 16:48:03
文章代碼(AID): #1T4cexeA (MacDev)
文章代碼(AID): #1T4cexeA (MacDev)