drawRect не вызывается из setNeedsDisplay
Я недавно начал изучать основную графику, чтобы рисовать на видах, но каждый раз, когда я звоню setNeedsDisplay
метод работает, но не запускается drawRect
, В моем проекте у меня есть представление о контроллере представления. Представление содержит оператор if в drawRect
это проверяет, является ли переменная BOOL ДА или НЕТ. Если ДА, он использует код, чтобы нарисовать красный круг. Если НЕТ, он рисует синий круг. В сеттере BOOL он вызывает setNeedsDisplay
, Я создаю экземпляр этого класса представления в ViewController и устанавливаю BOOL, но представление не перерисовывается. Почему метод не вызывается? Я разместил файлы xcode и биты кода ниже.
Customview.m:
#import "CustomView.h"
@implementation CustomView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setup];
}
return self;
}
-(void)awakeFromNib{
[self setup];
}
-(void)setup{
_choice1 = YES;
}
-(void)setChoice1:(BOOL)choice1{
_choice1 = choice1;
[self setNeedsDisplay];
}
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
if (_choice1) {
UIBezierPath * redCircle = [UIBezierPath bezierPathWithOvalInRect:rect];
[[UIColor redColor]setFill];
[redCircle fill];
}else if (!_choice1){
UIBezierPath * blueCircle = [UIBezierPath bezierPathWithOvalInRect:rect];
[[UIColor blueColor]setFill];
[blueCircle fill];
}
}
@end
CustomView.h:
#import <UIKit/UIKit.h>
@interface CustomView : UIView
@property (nonatomic) BOOL choice1;
@end
ViewController.m:
#import "ViewController.h"
#import "CustomView.h"
@interface ViewController ()
- (IBAction)Change:(id)sender;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)Change:(id)sender {
CustomView * cv = [[CustomView alloc]init];
[cv setChoice1:NO];
}
@end
Полный проект: https://www.mediafire.com/?2c8e5uay00wci0c
Спасибо
1 ответ
Вы должны создать выход для вашего CustomView
в вашем ViewController
, Удалить код, который создает новый CustomView
экземпляр и использование _cv
сослаться на customView.
@interface ViewController ()
- (IBAction)Change:(id)sender;
@property (weak,nonatomic) IBOutlet CustomView *cv;
@end
Затем в раскадровке подключите выход CV в ViewController к CustomView
, Кроме того, вам нужно будет реализовать initFromCoder:
метод на CustomView
,
- (id)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super initWithCoder:aDecoder])) {
[self setup];
}
return self;
}