iOS 5 UIView переопределение drawRect не работает на устройстве - PullRequest
6 голосов
/ 09 октября 2011

Я готовлю приложение для iPhone к публикации на iOS 5 GM и столкнулся с ошибкой в ​​UIView. Когда я переопределяю метод drawRect для подкласса, Simulator показывает желаемый результат, но когда я пытаюсь протестировать на реальном устройстве, переопределение drawRect вообще не оказывает никакого влияния.

Я даже поместил оператор записи в переопределение drawRect и подтвердил, что он вызывается.

Кто-нибудь еще заметил эту проблему?

Вот код переопределения, который я использую:

- (void)drawRect:(CGRect)rect {
DebugLog( @"*** calling drawRect ***" );

CGContextRef context = UIGraphicsGetCurrentContext(); 

// draw the dark gray background
CGContextSetFillColor(context, [SkinManager getWhiteColor]);
CGContextFillRect(context, CGRectMake(0.0, 0.0, rect.size.width, rect.size.height)); 

// draw the text field background in white
CGContextSetFillColor(context, [SkinManager getDarkGray]);
CGContextFillRect(context, CGRectMake(2.0, 2.0, rect.size.width - 4, rect.size.height - 4)); 

}

Вот код для генерации цвета

    +(const CGFloat*) getDarkGray {
        UIColor *color = [UIColor colorWithRed:51/255.0 green:51/255.0 blue:51/255.0 alpha:1];

        return [self getCGColor:color];
}

+(const CGFloat*) getCGColor: (UIColor*)color {
        CGColorRef colorref = [color CGColor];

        const CGFloat *components = CGColorGetComponents(colorref);

        return components;
}

Опять же, этот код отлично работает в iOS 4.x и в Симуляторе для iOS 5. Единственное место, которое сломано - это устройство iOS 5.

Ответы [ 3 ]

2 голосов
/ 31 августа 2012

Использование [self setNeedsDisplay];

Метод drawRect вызывается только при инициализации, поэтому он может передать это, если ваш объект был инициализирован ранее и вам необходимо его «обновить».

0 голосов
/ 21 октября 2011

в iOS 5 drawRect: не на некоторых объектах, например UINavigationBar.В этих обстоятельствах вы должны условно использовать новые методы стилевого оформления iOS 5.

Этот вопрос и этот вопрос могут быть полезны для вас.

0 голосов
/ 09 октября 2011

Вместо использования rect в вашем коде, попробуйте использовать self.bounds.Rect - это область, которая нуждается в обновлении, а не вся область вашего обзора.

...