2010-07-23 2 views
2

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

-(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]; 
    }  
} 

ответ

5

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

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

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

UIColor* white1 = [UIColor whiteColor]; 
if (white1 == [UIColor whiteColor]) 
    DLogFunction(@"White"); // Prints 
+0

работает отлично. большое спасибо. будет читать о указателях, чтобы узнать, что происходит за кулисами. – Ben

0
- (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 
}