以编程方式创建的uiview首次点击时无法响应

时间:2016-08-07 09:35:16

标签: ios swift uiview autolayout

大多数情况下,我在AutoLayout上创建了元素,但是有些uiviews是以编程方式创建的。有一个事件必须改变一些逻辑和UI。除了以编程方式创建的uiviews之外,一切正常。他们只有在第二次点击后才会改变状态。此外,如果我点击另一个以编程方式创建的uiview,之前的uiviews会丢失其当前状态并返回默认状态。可能是线程可能存在问题,我尝试了dispatch_async的一些组合,但它没有帮助。

以下是活动:

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。它应该改变它的alpha,但它不会。其他的事情很有效。

1 个答案:

答案 0 :(得分:1)

您还需要更改图像alpha。 为UIImage创建扩展:

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 alpha后,使用以下代码更改imageView中的图像alpha:

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

您还可以为imageview显示和隐藏设置隐藏属性,而不是设置alpha。当alpha为0时,设置imageView.hidden = true,当alpha为1时设置imageView.hidden = false