2013-06-18 29 views
7

Tôi chỉ muốn vẽ một hình chữ nhật đơn giản để một cái nhìn bằng cách sử dụng chức năng sau:UIBezierPath đơn giản hình chữ nhật

- (void)drawRect:(CGRect)rect { 
    [super drawRect:rect]; 
    if (self.drawTextBouble) { 
     [[UIColor blueColor] setFill]; 
     UIBezierPath *aPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(40, 0, 230, 120) cornerRadius:12.0]; 
     [aPath fill]; 
    } 
} 

Đoạn mã trên lấp đầy vùng đang xem với nền đen đơn giản, bên ngoài hình chữ nhật là không minh bạch. Làm thế nào tôi có thể sửa lỗi này?

Edit:

Các giải pháp dưới đây đang làm việc, nhưng điều này đang làm việc cũng:

[self setOpaque:NO]; 
+0

Đây là ví dụ tốt hơn về một câu hỏi mà tôi nghĩ là nó sẽ xảy ra. Có sẵn, mã sai, giải thích về vấn đề và kết quả mong muốn. Đó là một sự xấu hổ tôi không biết câu trả lời! –

+2

Tôi không thể tạo lại vấn đề với mã của bạn, nhưng có lẽ bạn không nên gọi '[super drawRect: rect]', so sánh http://stackoverflow.com/questions/14074281/subclassed-uiview-shows-black-background-if -trả lời-được-ghi đè. –

+0

cảm ơn bạn đã bình luận :), tôi đã cố gắng nhưng cư xử giống nhau. – flatronka

Trả lời

9

Bạn vẽ code is OK. Nếu bạn muốn xem tùy chỉnh rút ra để có nền trong suốt, bạn chỉ cần thiết lập

self.backgroundColor = [UIColor clearColor]; 

theo quan điểm của - (id)initWithFrame:(CGRect)frame

Chỉnh sửa: Chỉ cần một lưu ý nhỏ về gọi [super drawRect:rect]. UIView tài liệu nói:

Nếu bạn trực tiếp phân loại UIView trực tiếp, việc triển khai phương pháp này không cần gọi. Tuy nhiên, nếu bạn đang phân lớp một lớp xem khác, bạn nên gọi siêu tại một số điểm trong quá trình triển khai của bạn.

+0

cảm ơn bạn điều này đang làm việc, tôi tìm thấy một giải pháp thay thế đang hoạt động. – flatronka

Các vấn đề liên quan