Вы не можете изменить тип слоя существующего UIView
(имеется в виду: вы также не можете изменить слой UIImageView
), но рисование на слое довольно просто: вам нужно назначить делегата для вашегоCALayer
, и этот делегат должен реализовать drawLayer: inContext: .
Другим решением может быть создание подкласса UIView
и реализация +layerClass
:
+ (Class)layerClass
{
return [CAShapeLayer class];
}
Таким образом, ваше представление будет использовать слой формы, и вы можете просто использовать обычный UIView
drawRect:
метод.Затем вы можете получить доступ к слою через (CAShapeLayer *)[self layer]
, чтобы изменить его.Однако я не пробовал этот подход.
Редактировать: Объяснять, как будет сделано второе решение:
@interface MyView : UIView {
UIImage *image;
}
@property(retain) UIImage *image;
@end
@implementation MyView
@synthesize image;
+ (Class)layerClass
{
return [CAShapeLayer class];
}
- (void)dealloc
{
self.image = nil;
[super dealloc];
}
- (void)drawRect:(CGRect)rect
{
// Draw the image. You might need to play around with this,
// for example to draw the image as aspect fit or aspect fill.
[image drawInRect:rect];
}
@end