Почему это утверждение о UIColor whiteColor оценивается как ложное? - PullRequest
2 голосов
/ 23 июля 2010

Просто тестирую что-то .... Я пытаюсь заставить фоновый цвет моего взгляда переключаться, когда я встряхиваю его ... но только если в данный момент это определенный цвет.

-(void)viewDidLoad{    
    self.view.backgroundColor = [UIColor whiteColor];
}


-(void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event{       
    if(event.subtype == UIEventSubtypeMotionShake)
    {
        [self switchBackground];
    }
}


-(void)switchBackground{        
//I can't get the if statement below to evaluate to true - UIColor whiteColor is
// returning something I don't understand or maybe self.view.backgroundColor 
//is not the right property to be referencing?

    if (self.view.backgroundColor == [UIColor whiteColor]){

        self.view.backgroundColor = [UIColor blackColor];
    }    
}

Ответы [ 2 ]

5 голосов
/ 23 июля 2010

Вы сравниваете здесь указатели, а не значения цвета. Используйте метод -isEqual для сравнения объектов:

if ([self.view.backgroundColor isEqual:[UIColor whiteColor]])
   ...

Обратите внимание, что свойство backgroundColor представления определено с атрибутом copy, поэтому оно не сохраняет указатель на цветовой объект. Однако будет работать следующий простой пример:

UIColor* white1 = [UIColor whiteColor];
if (white1 == [UIColor whiteColor])
    DLogFunction(@"White"); // Prints
0 голосов
/ 23 июля 2010
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor=[UIColor whiteColor];
    if([self.view.backgroundColor isEqual:[UIColor whiteColor]]){
        self.view.backgroundColor=[UIColor blackColor];
    } else {
        self.view.backgroundColor=[UIColor whiteColor];
    }
    // your background will be black now
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...