2014-01-31 3 views
0

У меня есть подкласс UIView, который содержит UIImageView. Я хочу, чтобы изображение появилось круглым, так что я сделал это:UIImage не обрезается обтравочный контур

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    CGContextSaveGState(ctx); 
    CGPathRef clippath = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:17].CGPath; 
    CGContextAddPath(ctx, clippath); 
    CGContextClip(ctx); 
    [self.imageView.image drawInRect:rect]; 
    CGContextRestoreGState(ctx); 
} 

Однако изображения не являются круглыми, они являются регулярными прямоугольниками. В чем проблема?

+3

является вашим UIImageView подвид вашего UIView? Если это так, то будет показано над чертежом функции drawRect, и поэтому вы увидите UIImageView, а не UIView с пользовательским графическим изображением. – Putz1103

+0

My UIImageView - это подкласс AsyncImageView UIImageView. Мой UIView имеет xib, и в этом xib добавлен AsyncImageView и подключен к выходу под названием imageView. Отвечает ли это на ваш вопрос? – damjandd

+0

Да. Если ваш imageView находится поверх вашего UIView (как подзаголовок), вы никогда не увидите рисунок. У вас есть пара вариантов, я отправлю в ответ. – Putz1103

ответ

0

У вас есть пара вариантов, которые вы имеете, чтобы либо нарушить угол Radius на вашем UIImageView, чтобы он выглядел круговым, либо удалял UIImageView из подзонов UIView.

В первом случае вам не нужно иметь пользовательский чертеж, так как нужный вам круговой рисунок будет нарисован в UIImageView с помощью функции cornerRadius (и clipToBounds).

Во втором случае вам совсем не нужен UIImageView, просто UIImage. UIImageView - это всего лишь способ отображения UIImage на экране, и если об этом позаботиться в пользовательском чертеже вашего представления, вам не понадобится UIImageView.

Учитывая эти параметры, я считаю, что UIImageView с cornerRadius будет наиболее эффективным. Пользовательский чертеж занимает немного процессорного времени, которое UIImageView позаботится о вас.

+0

Прежде всего, я смотрел ТАК весь день, и все, казалось, предполагали, что обтравочные контуры были намного быстрее, чем закругленные углы. Вот чего я пытался избежать. Во-вторых, мне нужно использовать UIImageView, потому что, как я уже говорил, это не UIImageView, а AsyncImageView, поэтому мне нужна его функциональность. Не могу ли я сделать это как-то с clipToBounds? – damjandd

+0

Возможно, вы не понимаете, что он предлагает. Если у вас есть что-то вроде '[self addSubview: self.imageView]' где-то в вашем коде, или если это представление является подчиненным в вашем xib, тогда незашифрованное изображение будет рисовать обрезанное изображение, которое вы создаете в 'drawRect' , – Manny

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