我有一个UIViewController类,它包含两个自定义的UIView类:
ItemView控件
DrawingView
在UIViewController中的ViewDidLoad方法我有以下代码:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
item = [[ItemView alloc] initWithFrame:CGRectMake(self.view.frame.size.width/2, self.view.frame.size.height/2, 230, 230)];
item.opaque = NO;
[self.view addSubview:item];
drawing = [[DrawingView alloc] initWithFrame:self.view.frame];
[self.view insertSubview:drawing aboveSubview:item];
[item release];
[drawing release];
}
DrawingView类获取UITouches并相应地在屏幕上绘制。
我的问题是:
除了在ItemView类对象之上,我可以在屏幕上绘制。 DrawingView类无法绘制到ItemView。
让我用另一个词来解释:
除了itemView子视图的区域外,DrawView类在屏幕上工作。在itemView之上,DrawView无法进行任何绘制,但除了itemView区域之外,它还可以进行绘制。
我该怎么办? 可能是什么问题? 如何在所有屏幕上绘图,包括在ViewController类上添加addSubview的itemView区域?
编辑:我正在添加截图以更好地解释问题编辑2:我发现问题与不透明度有关。在ItemView类中,我将添加的UIImageView对象alpha值更改为0.5f。 结果是半透明视图,现在我的手指绘图是可见的。但是,这不是我想要的。我想画在视图之上。我不想玩alpha值。
答案 0 :(得分:0)
最后,我自己找到了答案。这不是我想要的,但我的解决方案基于CALayer。
我没有使用像ItemView这样的自定义UIView类,而是在ItemView类中添加了以下类方法:
+(CALayer *)imgLayer
{
UIImage *img = [UIImage imageNamed:@"face.png"];
CALayer *layer = [CALayer layer];
CGFloat nativeWidth = CGImageGetWidth(img.CGImage);
CGFloat nativeHeight = CGImageGetHeight(img.CGImage);
CGRect startFrame = CGRectMake(0, 0, nativeWidth, nativeHeight);
layer.contents = (id)img.CGImage;
layer.frame = startFrame;
return layer;
}
在我的UIVIewController类中,我调用了静态函数,如下所示:
CAGradientLayer *bgLayer = [GradientView greyGradient];
bgLayer.frame = self.view.bounds;
[self.view.layer insertSublayer:bgLayer atIndex:0];
CALayer *imgLayer =[ItemView imgLayer];
imgLayer.frame = self.view.bounds;
[self.view.layer insertSublayer:imgLayer above:bgLayer];
它有效!现在我可以在我的图像上绘图了。