2013-02-26 7 views
14

Siyah bir kenarlığı olan UIView'de saydam bir dikdörtgen çizmeye çalışıyorum.UIView'de bir dikdörtgen çizimi

Kodum ancak tamamen siyah dikdörtgen oluşturur. İşte benim kod şimdiye kadar var:

- (void)drawRect:(CGRect)rect 
{ 
    // Drawing code 
    CGRect rectangle = CGRectMake(0, 100, 320, 100); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetRGBFillColor(context, 0.0, 0.0, 0.0, 0.5); 
    CGContextSetRGBStrokeColor(context, 0.0, 0.0, 0.0, 0.5); 
    CGContextFillRect(context, rectangle); 

} 
+1

'CGContextFillRect 'öğesini' CGContextStrokeRect' olarak değiştirin –

+0

Aynı sorun. Sadece siyah bir dikdörtgen (ve tamamen siyah) –

+0

CGContextSetRGBFillColor'da alfa 0.0 ile deneyin (bağlam, 0.0, 0.0, 0.0, 0.5); – Exploring

cevap

19
- (void)drawRect:(CGRect)rect 
{ 
    // Drawing code 
    CGRect rectangle = CGRectMake(0, 100, 320, 100); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 0.0); //this is the transparent color 
    CGContextSetRGBStrokeColor(context, 0.0, 0.0, 0.0, 0.5); 
    CGContextFillRect(context, rectangle); 
    CGContextStrokeRect(context, rectangle); //this will draw the border 

} 

etkisi (backgroundColor mavidir)

enter image description here

+0

Hmm yardımcı olmadığını görmek. RGB için bazı rastgele değerler girmeyi denediğimde bile, her seferinde sadece siyah bir dikdörtgen gösterir. –

+0

@AshishAgarwal şeffaf dikdörtgen istiyor, RGB için neden rastgele değerler giriyorsunuz? Çizimime bak –

+1

Eh, siyahtan başka bir şey görmeye çalışıyorum. Ancak şimdiye kadar hiç şans yok –

3
O kendini çerçevesinin değerlerini ayarlayarak dikdörtgen/kare sağlayacak

(özelleştirilmiş böyledir Şeffaflık ile UIView'dan alınan herhangi bir sınıfın alt sınıfı veya alt sınıfı.

[self.layer setBorderWidth:1.0]; 
[self.layer setBorderColor:[[UIColor colorWithRed:0.10 green:0.45 blue:0.73 alpha:1.0] CGColor]]; 
[self.layer setCornerRadius:2.0]; 
[self.layer setShadowOffset:CGSizeMake(-2, -2)]; 
[self.layer setShadowColor:[[UIColor lightGrayColor] CGColor]]; 
[self.layer setShadowOpacity:0.5]; 
+0

Bu dikdörtgenin Alpha özelliğini de, bu dikdörtgenin belki% 50 şeffaf olması için ayarlayabilir miyiz? Teşekkür ederim. – Thanh

0
CGRect bounds = connectorRect; 
CGFloat minx = CGRectGetMinX(bounds), midx = CGRectGetMidX(bounds), maxx = CGRectGetMaxX(bounds); 
CGFloat miny = CGRectGetMinY(bounds), maxy = CGRectGetMaxY(bounds); 
CGContextSetFillColorWithColor(context, [UIColor grayColor].CGColor); 
CGContextSetLineWidth(context, 1.0); 
CGContextBeginPath(context); 
CGContextSetStrokeColorWithColor(context,[UIColor clearColor].CGColor); 
CGContextMoveToPoint(context, minx, maxy); 
CGContextAddLineToPoint(context, midx, miny); 
CGContextAddLineToPoint(context, maxx, maxy); 
CGContextClosePath(context); 
CGContextDrawPath(context, kCGPathFillStroke); 
+3

Üçgen için bu Dikdörtgen – ashokdy

+1

için değil Dikdörtgen için değil, ancak üçgenini gösterir – vishnu

1

Kodunuz CGContextSetRGBFillColor çağrıyı gerektirmez ve CGContextStrokeRect çağrı eksik. Swift 3 ile, son draw(_:) uygulama aşağıdaki gibi görünmelidir:

class CustomView: UIView { 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
     backgroundColor = .white 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    override func draw(_ rect: CGRect) { 
     guard let ctx = UIGraphicsGetCurrentContext() else { return }  
     ctx.setStrokeColor(red: 0, green: 0, blue: 0, alpha: 0.5) 
     let rectangle = CGRect(x: 0, y: 100, width: 320, height: 100) 
     ctx.stroke(rectangle) 
    } 

} 

alternatif olarak, senin gerçekten CGContextSetRGBFillColor aramak istiyorsanız, siz de çağrıyı CGContextFillRect olması. Nihai draw(_:) uygulama daha sonra Swift 3 ile şu şekilde görünecektir:

class CustomView: UIView { 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
     backgroundColor = .white 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    override func draw(_ rect: CGRect) { 
     guard let ctx = UIGraphicsGetCurrentContext() else { return } 

     ctx.setFillColor(red: 1, green: 1, blue: 1, alpha: 0) 
     ctx.setStrokeColor(red: 0, green: 0, blue: 0, alpha: 0.5) 

     let rectangle = CGRect(x: 0, y: 100, width: 320, height: 100) 
     ctx.fill(rectangle) 
     ctx.stroke(rectangle) 
    } 

} 
1

Bir kullanışlı ipucu ...... Çoğu zaman, bir bir meydana

bu daha kolaydır çizmek gerektiğinde

sadece 'kalın şerit' ..... çizmek 200'e aşağıya doğru uzanan bir kare, çekecek
let context = UIGraphicsGetCurrentContext() 
    context!.setLineWidth(100) 
    context!.setStrokeColor(blah.cgColor) 
    context?.move(to: CGPoint(x: 500, y: 200)) 
    context?.addLine(to: CGPoint(x: 500, y: 300)) 
    context!.strokePath() 

300.

O genelinde 500 merkez ve 100 genişliğinde oluyor.