2016-07-23 12 views
1

mein Code Hier ist also ein bestimmtes Gefälle für die Erstellung von:Kern Graphik- Mit CGGradient mit Schlaganfällen und Text

 let newBlueOne = UIColor(red: 0.141, green: 0.776, blue: 0.863,  alpha: 1.000) 
    let newBlueTwo = UIColor(red: 0.318, green: 0.290, blue: 0.616, alpha: 1.000) 

Und hier ist der Code für den Gradienten selbst:

let newBlue = CGGradientCreateWithColors(CGColorSpaceCreateDeviceRGB(), [newBlue1.CGColor, newBlue2.CGColor], [0, 1])! 

Hier ist die Code für das Rechteck, das ich versuche zu machen:

 let rectanglePath = UIBezierPath(roundedRect: CGRect(x: 22, y: 35, width: 194, height: 38), cornerRadius: 19) 
    CGContextSaveGState(context) 
    rectanglePath.addClip() 
    CGContextDrawLinearGradient(context, translucent1, CGPoint(x: 119, y: 35), CGPoint(x: 119, y: 73), CGGradientDrawingOptions()) 
    CGContextRestoreGState(context) 
    rectanglePath.lineWidth = 1 
    rectanglePath.stroke() 

Ich möchte diesen newBlue Verlauf oben als Strichfarbe verwenden für dieses Rechteck erstellt. Ich möchte auch die Farbe eines Textes zu diesem newBlue Farbverlauf ändern. Leider kann ich es nicht genau herausfinden. Kann jemand helfen?

Ich schätze Ihre Antworten und freue mich darauf, sie zu lesen. Vielen Dank :)

Antwort

2

Sie können einen Pfad mit einem Farbverlauf nicht direkt streichen.

Um zu tun, was Sie wollen, müssen Sie auf die Core Graphics Layer gehen und die CGContext-Funktionen verwenden.

Zuerst erstellen Sie Ihren Pfad und legen seine verschiedenen Eigenschaften fest, z. B. Linienstärke.

Dann verwenden Sie die CGContextReplacePathWithStrokedPath (Kontext) -Funktion. Schauen Sie in der CGContext-Dokumentation nach.

Dann verwenden Sie den resultierenden Pfad als Clip-Pfad.

Und dann malen Sie diesen Bereich mit Ihrem Farbverlauf.

wie folgt aus:

override func drawRect(rect: CGRect) { 
    let newBlueOne = UIColor(red: 0.141, green: 0.776, blue: 0.863, alpha: 1.000) 
    let newBlueTwo = UIColor(red: 0.318, green: 0.290, blue: 0.616, alpha: 1.000) 
    let newBlue = CGGradientCreateWithColors(CGColorSpaceCreateDeviceRGB(), [newBlueOne.CGColor, newBlueTwo.CGColor], [0, 1])! 

    let lineWeight: CGFloat = 20.0 

    let context: CGContext = UIGraphicsGetCurrentContext()! 

    let rect: CGRect = CGRectMake(40.0, 40.0, 200.0, 200.0) 
    CGContextAddRect(context, rect) 
    CGContextSetLineWidth(context, lineWeight) 
    CGContextReplacePathWithStrokedPath(context) 
    CGContextClip(context) 

    let startPoint: CGPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMinY(rect)) 
    let endPoint: CGPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMaxY(rect)) 
    CGContextDrawLinearGradient(context, newBlue, startPoint, endPoint, CGGradientDrawingOptions(rawValue: 0)) 
} 

ich adressiert nur die Grenze zu malen. Ich weiß nichts über den Text.

+0

Sorry, ich habe nicht ganz verstanden, wie es geht. Ich möchte nur einen Farbverlauf zum Strich des Elements hinzufügen und dem Text einen Farbverlauf hinzufügen –

+0

"Ich möchte nur einen Farbverlauf hinzufügen": Sie können nicht "nur" einen Farbverlauf hinzufügen. Die Art und Weise, wie Sie einen Verlauf zeichnen, unterscheidet sich grundlegend von der Art, wie Sie einen Pfad streichen. Diese Antwort erklärt, was zu tun ist. Sie können ["Verwenden eines CGGradient-Objekts" im * Quartz 2D-Programmierhandbuch *] lesen (https://developer.apple.com/library/mac/documentation/GraphicsImaging/Conceptual/drawingquarz2d/dq_shading/dq_shadings.html#// Apple_ref/doc/uid/TP30001066-CH207-SW4) für weitere Informationen. –