2015-03-06 2 views
0

У меня есть этот подкласс UIView, который я хочу использовать для отображения пользовательского представления. Проблема в том, что я не могу сделать обычай CAGradientLayer, чтобы он появился на мой взгляд ... Я все еще вижу его как красную полоску.Невозможно добавить CAGradientLayer для отображения в подклассе UIView

public class PSTLoadingBar : UIView { 

private var loadingBarView: UIView! 
private var gradientLayer: CAGradientLayer! 

required public init(coder aDecoder: NSCoder) { 
    fatalError("Not coder compliant") 
} 

public override var frame: CGRect { 
    didSet { 

     if frame == CGRect.zeroRect { 
      return 
     } 

     loadingBarView.frame = frame 
    } 
} 

// MARK: - Singleton 
public class var sharedInstance: PSTLoadingBar { 
    struct Singleton { 
     static let instance = PSTLoadingBar(frame: CGRect.zeroRect) 
    } 
    return Singleton.instance 
} 

public override init(frame:CGRect) { 

    super.init(frame:frame) 

    loadingBarView = UIView() 
    loadingBarView.backgroundColor = UIColor.redColor() 

    gradientLayer = CAGradientLayer() 
    gradientLayer.frame = loadingBarView.bounds 
    gradientLayer.opacity = 1 

    let color1 = UIColor(red: 67/255, green: 36/255, blue: 84/255, alpha: 1).CGColor 
    let color2 = UIColor(red: 67/255, green: 36/255, blue: 84/255, alpha: 1).CGColor 

    let colors = [color1, color2] 

    gradientLayer.startPoint = CGPointMake(0,0.5) 
    gradientLayer.endPoint = CGPointMake(1.0, 0.5) 
    gradientLayer.colors = colors 


    loadingBarView.layer.insertSublayer(gradientLayer, atIndex:0) 

    addSubview(loadingBarView) 

} 

// MARK: - Public Methods 
public class func show(parentView: UIView) { 

    let loadingBar = PSTLoadingBar.sharedInstance 

    let _view = UIApplication.sharedApplication().keyWindow?.rootViewController?.view 

    if let _view = _view { 

     loadingBar.frame = CGRectMake(0, 32, _view.bounds.width, 5) 


     if loadingBar.superview == nil { 
      _view.addSubview(loadingBar) 
     } 

    } 
} 

Я попытался добавить подслой в различных индексов и я также попытался с self.layer вместо loadingBar.layer но снова без успеха.

Я подозреваю, что мне нужно переопределить другой метод из UIView, но я не уверен, что это так.

Любые идеи?

+0

Ваши цвета идентичны, поэтому вы не увидите градиент ... –

+0

@IanMacDonald это не имеет значения. Я не вижу ничего близкого к цветам, я вижу красный цвет, который является «backgroundColor» UIView. Я не вижу никакого градиента, даже если бы установил два разных цвета. – Thanos

ответ

3

При создании loadingBarView его рамка CGRectZero - прямоугольник с нулевой шириной и высотой, что приводит к тому, что слой градиента одинаково имеет нулевую ширину и высоту и поэтому не отображается. Добавление слоя в -layoutSubviews не требуется - вам просто нужно обновить его рамку до границ loadingBarView.

Смежные вопросы