2016-08-07 4 views
1

ほとんどの場合、私は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です。アルファは変わるはずですが、アルファは変わりません。他のものはうまくいく。

答えて

1

また、画像のアルファも変更する必要があります。 UIImageのための拡張機能を作成します。ImageViewのアルファを設定した後ImageViewの画像アルファを変更するためのコードの下

extension UIImage { 
    func setImageAlpha(alpha:CGFloat) -> UIImage { 
     UIGraphicsBeginImageContextWithOptions(self.size, false, 0.0) 

     let ctx = UIGraphicsGetCurrentContext(); 
     let area = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height); 

     CGContextScaleCTM(ctx, 1, -1); 
     CGContextTranslateCTM(ctx, 0, -area.size.height); 
     CGContextSetBlendMode(ctx, .Multiply); 
     CGContextSetAlpha(ctx, alpha); 
     CGContextDrawImage(ctx, area, self.CGImage); 

     let newImage = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 

     return newImage; 
    } 
} 

用途:

imageView.image = imageView.image?.setImageAlpha(1.0) 

をあなたはまた、ImageViewのショーのために隠されたプロパティを設定し、アルファを設定する代わりに非表示にすることができます。その時点でalphaが0の場合、imageView.hidden = trueを設定し、その時点でalphaが1の場合、imageView.hidden = falseを設定します。

+0

いいえ、初めて動作しません。私は、問題はこのuiviewの定義に関連していると思います。最初のクリックだけでは機能しないためです。その後、うまく動作します。 uiviewは最初のクリックで定義されているようですが、スレッドのどこかに保存されています。 – Slava

+0

filters.comfortの初期値をfalseに変更した場合はtrue、falseであればtrueに変更してください –

関連する問題