我有一个UIViewController类,其中包含2个自定义UIView类:
项目视图
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。
让我用另一句话来解释一下:
DrawView类在屏幕上起作用,但itemView子视图的区域除外。在itemView的顶部,DrawView不能绘制任何东西,但itemView区域除外,它可以绘制。
我能做什么?
可能是什么问题?
如何在包括ViewController类的addSubview添加的itemView区域的所有屏幕上绘制图形?
编辑:我正在添加一个屏幕截图,以便更好地说明问题
编辑2:我发现问题与不透明有关。在ItemView类中,我将添加的UIImageView对象的alpha值更改为0.5f。
结果是半透明视图,现在可以看到我的手指画了。但是,这不是我想要的。我想在视图之上绘制。我不想使用alpha值。
最佳答案
最后,我自己找到了答案。这不是我想要的,但我的解决方案基于CALayer。
我没有使用像ItemView这样的自定义UIView类,而是在ItemView Class中添加了以下类方法:
+(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];
而且有效!现在我可以在图像上绘制图纸了。
关于ios - 从一个UIView类到另一个UIView类的手指绘画,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10390801/