2012-04-28 3 views
0

У меня есть подкласс UIView, который я бы хотел использовать для рисования изображений с различными режимами наложения.drawRect в подклассе UIView не обновляет изображение

код:

@implementation CompositeImageView 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 

-(void)setBlendMode:(CGBlendMode) composite 
{ 
    blender = composite; 
} 

-(void)setImage:(UIImage*) img 
{ 
    image = img; 
} 

- (void)drawRect:(CGRect)rect 
{ 
    NSLog(@"it draws"); 
    CGContextRef c = UIGraphicsGetCurrentContext(); 
    CGContextSetBlendMode(c, blender); 
    CGContextDrawImage(c, rect, image.CGImage); 
} 

@end 

код, который я использую, чтобы настроить его именно:

[testImage setImage:[UIImage imageNamed:@"Prayer_Background_Paid"]]; 
[testImage setBlendMode:kCGBlendModeColor]; 
[testImage setNeedsDisplay]; 

Я использую интерфейс строитель поместить большой прямоугольный UIView, а затем установить его класс к CompositeImageView. Тем не менее, он по-прежнему рисует как большой белый квадрат. Даже если я прокомментирую все внутри drawRect, он по-прежнему рисует белый квадрат. Тем не менее, он вызывает drawRect, потому что «он рисует» записывается в журнал.

+0

Вы уверены, что ваше изображение не 'nil' (возможно, опечатка в имени файла)? – omz

+0

есть. Я также попробовал несколько других изображений в проекте. Если что-то не так с тем, как я получаю/рисую изображение, тогда я понятия не имею, что может быть неправильным - поэтому, почему я разместил здесь. (не уверен, что с отрицательными голосами) – Nyth

+0

Вы смогли сделать эту работу? Я пытаюсь сделать то же самое прямо сейчас. –

ответ

0

Вы уверены, что kCGBlendModeColor - это то, что вы хотите? С Apple, док:

Использует значения яркости фона с оттенком и значений насыщенности исходного изображения.

Кажется, что если бы это был белый фон, смешанное изображение также выглядело бы белым.

+0

Цвет был только одним из них, который я попытался. Как я уже упоминал, я попытался полностью прокомментировать метод drawRect, и белый прямоугольник все еще произошел. – Nyth

+0

попробуйте установить self.backgroundColor = [UIColor clearColor]; в init. –

+0

установив цвет фона, чтобы очистить его, чтобы он не рисовал вообще, хотя он все еще вызывает метод drawRect ... – Nyth

Смежные вопросы