ほとんどの場合、私はAutoLayoutで作成された要素を持っていますが、プログラムによって作成されるいくつかのuiviewがあります。いくつかのロジックとUIを変更する必要のあるイベントがあります。プログラムで作成されたuiviewを除いて、すべてうまくいきます。 2回目のクリック後にのみ状態が変わります。さらに、プログラムで作成された別のuiviewをクリックすると、以前のuiviewは現在の状態を失い、デフォルトに戻ります。スレッドに問題がある可能性がありますが、dispatch_async
の組み合わせをいくつか試しましたが、それは役に立たなかったでしょう。ここでプログラムで作成したuiviewは最初のクリックで応答しません
はイベントです:
func actFilterComfort(sender: UIButton) {
let subview = self.labelSettingViewComfort.subviews[0] as UIView
let imageView = sender.superview?.viewWithTag(120) as! UIImageView
if(!filters.comfort) {
filters.comfort = true
filters.comfortImage.frame = CGRectMake(self.comfortDisplay.frame.origin.x + (CGFloat(filters.counter) * 10.0), 0.0, 20.0, 20.0)
self.comfortDisplay.hidden = true
subview.addSubview(filters.comfortImage)
subview.sendSubviewToBack(filters.comfortImage)
imageView.alpha = 1
filters.counter += 1
}
else {
filters.comfort = false
imageView.alpha = 0
filters.comfortImage.removeFromSuperview()
if(filters.counter == 1) {
self.comfortDisplay.hidden = false
}
else {
self.alignFiltersImages(subview, counter: filters.counter)
}
filters.counter -= 1
}
}
imageView
は、プログラム作成のUIViewです。アルファは変わるはずですが、アルファは変わりません。他のものはうまくいく。
いいえ、初めて動作しません。私は、問題はこのuiviewの定義に関連していると思います。最初のクリックだけでは機能しないためです。その後、うまく動作します。 uiviewは最初のクリックで定義されているようですが、スレッドのどこかに保存されています。 – Slava
filters.comfortの初期値をfalseに変更した場合はtrue、falseであればtrueに変更してください –