Ne devrait pas drawRect:
être appelé automatiquement pour l'animation de la mise à jour pour le nouveau tintColor
?
J'ai fait une démo de l'application qui a trois contrôles dans la vue principale du contrôleur. Le premier est un bouton qui met en place une norme d'action de la feuille. Le second est un bouton qui est là pour l'observation (l'taraudés bouton est difficile de le comparer à lors de l'animation). La troisième est une coutume UIView
sous-classe qui dessine simplement un rectangle de la vue de l' tintColor
. Lors de l' tintColorDidChange
s'appelle, j'appelle setNeedsDisplay
, qui appellera à son tour drawRect:
.
J'ai créé une nouvelle application avec une vue contrôleur:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[[UIApplication sharedApplication] keyWindow].tintColor = [UIColor blueColor];
// Button to bring up action sheet
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = (CGRect){10,30,300,44};
[button setTitle:@"Present Action Sheet" forState:UIControlStateNormal];
[button addTarget:self
action:@selector(didTapPresentActionSheetButton:)
forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
// Another button for demonstration
UIButton *anotherButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
anotherButton.frame = (CGRect){10,90,300,44};
[anotherButton setTitle:@"Another Button" forState:UIControlStateNormal];
[self.view addSubview:anotherButton];
// Custom view with tintColor
TESTCustomView *customView = [[TESTCustomView alloc] initWithFrame:(CGRect){10,150,300,44}];
[self.view addSubview:customView];
}
- (void)didTapPresentActionSheetButton:(id)sender
{
UIActionSheet *as = [[UIActionSheet alloc] initWithTitle:@"Action Sheet"
delegate:nil
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:@"Delete"
otherButtonTitles:@"Other", nil];
[as showInView:self.view];
}
où TESTCustomView
est UIView
sous-classe avec la mise en œuvre comme suit:
- (void)drawRect:(CGRect)rect
{
NSLog(@"Drawing with tintColor: %@", self.tintColor);
// Drawing code
[super drawRect:rect];
CGContextRef c = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(c, self.tintColor.CGColor);
CGContextFillRect(c, rect);
}
- (void)tintColorDidChange
{
[self setNeedsDisplay];
}
L'exécution de cette application dans le simulateur montre que l'affichage personnalisé de la nuance de couleur est automatiquement animé avec la norme UIButton
des cas dans la vue-contrôleur.