3

ユーザーがジェスチャーでディスプレイを暗くできるようにしようとしているアプリがあります。他の多くのビューとボタンを含む UIView があり、その上に背景色を黒に設定した UIView を配置します。調光を行わないように、その調光ビューのアルファをゼロ (透明) に設定します。薄暗くするために、アルファ値を少しずつ増やします。それはうまく機能しているように見えますが... (それが来ることはわかっていました) アルファ値が 0 より大きくなると、タッチ イベントがブロックされ、通常どおり受信されません。

ディマー ビューの作成:

UIPanGestureRecognizer * panner = nil;
panner = [[UIPanGestureRecognizer alloc] initWithTarget: self action:@selector(handlePanGesture:)];
[self.view addGestureRecognizer:panner ];
[panner setDelegate:self];
[panner release];


CGRect frame = CGRectMake(0, 0, 320, 460);
self.dimmer = [[UIView alloc] initWithFrame:frame];
[self.dimmer setBackgroundColor:[UIColor blackColor]];
[self.view addSubview:dimmer];

パン ジェスチャの処理:

-(IBAction) handlePanGesture:(UIPanGestureRecognizer *) sender
{
    static CGPoint lastPosition = {0};
    CGPoint nowPosition;
    float alpha = 0.0;
    float new_alpha = 0.0;
    nowPosition = [sender translationInView: [self view]];
    alpha = [dimmer alpha];

    if (nowPosition.y > lastPosition.y)
    {   NSLog(@"Down");
        new_alpha = min(alpha + 0.02,1.0);
        [dimmer setAlpha:(new_alpha)];
    }
    else if (nowPosition.y < lastPosition.y)
    { 
        NSLog(@"Up"); 
        new_alpha = max(alpha - 0.02,0);
        [dimmer setAlpha:(new_alpha)];
    }
    else
    {   NSLog(@" neither "); }
    NSLog(@"alpha = %f new_alpha = %f", alpha, new_alpha);
    lastPosition = nowPosition;
}

イベントがブロックされている理由はありますか? これを行うより良い方法はありますか?
私はいくつかの投稿を読み、かなりグーグルで検索しましたが、あまり関連性のあるものは見当たりませんでした.

すべての助けに感謝します。

:bp:

4

1 に答える 1

4

ディマー ビューで userInteractionEnabled を NO に設定してみてください。これにより、タッチ イベントと対話しないようにビューに指示する必要があります。これにより、ディマーの下のビューまで続行できるようになります。

于 2010-12-06T22:11:01.797 に答える