2015-05-14 13 views

Antwort

8

Fügen Sie diese Klasse in Ihrem Projekt (swift):

class UIGradientImageView: UIImageView { 

let myGradientLayer: CAGradientLayer 

override init?(frame: CGRect){ 
    myGradientLayer = CAGradientLayer() 
    super.init(frame: frame) 
    self.setup() 
    addGradientLayer() 
} 

func addGradientLayer(){ 
    if myGradientLayer.superlayer == nil{ 
     self.layer.addSublayer(myGradientLayer) 
    } 
} 

required init(coder aDecoder: NSCoder){ 
    myGradientLayer = CAGradientLayer() 
    super.init(coder: aDecoder) 
    self.setup() 
    addGradientLayer() 
} 

func getColors() -> [CGColorRef] { 
    return [UIColor.clearColor().CGColor, UIColor(red: 0, green: 0, blue: 0, alpha: 0.5).CGColor] 
} 

func getLocations() -> [CGFloat]{ 
    return [0.5, 0.9] 
} 

func setup() { 
    myGradientLayer.startPoint = CGPoint(x: 0.5, y: 0) 
    myGradientLayer.endPoint = CGPoint(x: 0.5, y: 1) 

    let colors = getColors() 
    myGradientLayer.colors = colors 
    myGradientLayer.opaque = false 
    myGradientLayer.locations = getLocations() 
} 

override func layoutSubviews() { 
    super.layoutSubviews() 
    myGradientLayer.frame = self.layer.bounds 
} 
} 

UPDATE: Objective-C übersetzt Lösung. Dankeschön an @ SleepsOnNewspapers.

#import "UIGradientImageView.h" 

@interface UIGradientImageView() 

    @property (nonatomic, strong) CAGradientLayer *myGradientLayer; 

@end 

@implementation UIGradientImageView 

-(instancetype)initWithFrame:(CGRect)frame{ 

if(self){ 
    self = [super initWithFrame:frame]; 
    self.myGradientLayer = [[CAGradientLayer alloc]init]; 
    [self setup]; 
    [self addGradientLayer]; 
    } 
return self; 
} 

-(instancetype)initWithCoder:(NSCoder *)aDecoder{ 

if(self){ 
    self = [super initWithCoder:aDecoder]; 
    self.myGradientLayer = [[CAGradientLayer alloc]init]; 
    [self setup]; 
    [self addGradientLayer]; 
    } 
    return self; 
} 

-(void)addGradientLayer{ 
if (self.myGradientLayer.superlayer == nil) { 
    [self.layer addSublayer:self.myGradientLayer]; 
} 
} 

Machen Sie Ihre UIImageView Klasse auf dem Storyboard dieses statt Verzug.

enter image description here

+0

irgendein Unterschied zwischen diesem und CGGradientLayer? Auch ist die Umsetzung dieser viel anders in Ziel c? – SleepsOnNewspapers

+0

.. sollte ähnlich sein. Übersetzen Sie einfach von schnell nach Objective-C, alles ist verfügbar. –

+0

dieser Code wird nicht funktionieren. Es berücksichtigt nicht, dass uitableviewcells neu gezeichnet werden – SleepsOnNewspapers

Verwandte Themen