Tôi là người mới bắt đầu trong lập trình iOS, vì vậy xin lỗi nếu câu hỏi của tôi là một câu hỏi ngu ngốc.Lớp con UIView: drawRect không được gọi là
Tôi đang cố gắng tạo ứng dụng thực hiện vẽ tùy chỉnh trên hình ảnh được tải.
Để làm điều đó, tôi phát hiện ra rằng giải pháp là để phân lớp UIView
và chỉnh sửa phương pháp drawRect
.
Tôi đã thực hiện điều đó trên mã sau đây kích hoạt trên IBAction
được liên kết với một nút trong tệp bảng phân cảnh Bộ dựng giao diện.
UIImageView *image = [[UIImageView alloc] initWithImage: [UIImage imageNamed: @"SampleImage.jpg"]];
image.frame = previewView.frame;
[image setContentMode:UIViewContentModeScaleAspectFit];
[previewView addSubview:image];
customView *aCustomView = [[customView alloc] initWithFrame: CGRectMake(image.bounds.origin.x, image.bounds.origin.y, image.bounds.size.width, image.bounds.size.height)];
[previewView addSubview:aCustomView];
customView
là lớp con UIView
mà tôi tạo ra, mà init
và drawRect
phương pháp được thiết lập như thế này:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
NSLog(@"INITIALIZING");
if (self) {
// Initialization code
[self setBackgroundColor:[UIColor clearColor]];
}
return self;
}
- (void)drawRect:(CGRect)rect
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
NSLog(@"DRAWING");
CGContextClearRect(ctx, rect);
CGContextSetRGBFillColor(ctx, 0, 255, 0, 0.3);
CGContextFillEllipseInRect(ctx, rect);
CGContextSetRGBStrokeColor(ctx, 255, 0, 0, 1);
CGContextSetLineWidth(ctx, 2);
CGContextStrokeEllipseInRect(ctx, rect);
}
Vấn đề mà tôi có là không vẽ được thực hiện và trên NSLog
Tôi có "INITIALIZING" tin nhắn, nhưng không phải là bản vẽ "BẢN V" ".
Vì vậy, về cơ bản nó làm cho initWithFrame
, nhưng nó không gọi phương thức drawRect
.
Bạn vui lòng cho tôi biết tôi đang làm gì sai?
Cảm ơn, bằng cách đặt NSLog, tôi phát hiện có điều gì đó sai trong khi gọi phương thức drawRect. Bằng cách thêm [previewView setNeedDisplay], phương thức này được gọi nhưng không phải khi tôi mong đợi nó được thực hiện. Tôi có nghĩa là, bằng cách làm theo các bước mã thực hiện dòng [previewView setNeedDisplay] không làm cho bản vẽ tùy chỉnh xuất hiện, thay vào đó nó xuất hiện sau này theo một cách nào đó. Tôi muốn hiểu trong thời điểm nào phương thức drawRect được gọi nhưng dù sao vấn đề ban đầu đã được giải quyết, cảm ơn :) – Dobrodeveloper