2015-05-14 22 views

risposta

8

Aggiungi questa classe nel progetto (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: soluzione tradotto Objective-C. Crediti per @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]; 
} 
} 

Fai la tua classe UIImageView sul storyboard essere questo uno invece di default.

enter image description here

+0

qualsiasi differenza tra questo e CGGradientLayer? Inoltre è l'implementazione di questo molto diverso nell'obiettivo c? – SleepsOnNewspapers

+0

.. potrebbe essere simile. Basta tradurre da rapido a Objective-C, tutto è disponibile. –

+0

questo codice non funzionerà. Non tiene conto del fatto che uitableviewcells viene ridisegnato – SleepsOnNewspapers

Problemi correlati