我有一个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/

10-13 03:57