1

次の2つのカスタムUIViewクラスを保持するUIViewControllerクラスがあります。

アイテムビュー

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 領域を含む全画面に描画するにはどうすればよいですか?

編集:問題をよりよく説明するためにスクリーンショットを追加しています

この画像リンクでは、白い領域には描画できますが、ItemView クラスによって読み込まれた画像である顔には描画できないことがわかります。

編集 2: 問題は不透明度に関連していることがわかりました。ItemView クラスでは、追加された UIImageView オブジェクトのアルファ値を 0.5f に変更しました。結果は半透明のビューになり、私の指の描画が見え​​るようになりました。しかし、これは私が望むものではありません。ビューの上に描画したい。私はアルファ値で遊びたくありません。

4

1 に答える 1

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];

そしてそれはうまくいきます!今、私は自分のイメージに絵を描くことができます。

于 2012-05-03T11:49:33.283 に答える