作者homelife (SKY)
看板MacDev
标题[问题] 使用程式码存取StackView中某个元件
时间Wed Jun 26 02:38:49 2019
最近在写一个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://webptt.com/cn.aspx?n=bbs/MacDev/M.1561487931.A.A0A.html
1F:推 appleway: viewWithTag(_:)166.171.249.179 06/26 03:34
2F:嘘 Blueshiva: 先设个中断点看addNode被执行几次? 118.160.164.97 06/26 10:40
谢谢,後来发现在启动按钮中执行了多余的addNote
※ 编辑: homelife (61.231.130.131 台湾), 06/28/2019 16:48:03