IOS: paramètre alpha de vue gradateur 'à plus de 0.0 désactive toucher des événements (?)

StackOverflow https://stackoverflow.com/questions/4371054

Question

J'ai une application dans laquelle je suis en train de permettre à l'utilisateur d'assombrir l'affichage par des gestes. J'ai un UIView qui contient un certain nombre d'autres points de vue et des boutons, et plus que je place une UIView dont la couleur de fond noir je ensemble. Pour avoir aucune variation, je régler l'alpha de ce point de vue variateur à zéro (transparent). Pour gradation effet, j'augmente la valeur alpha dans les petites étapes. Cela semble bien fonctionner sauf que ... (vous saviez que venait) chaque fois que la valeur alpha devient supérieure à zéro, les événements tactiles sont bloqués - pas reçu normalement.

Création de la vue variateur:

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

manipulation du mouvement de panoramique:

-(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;
}

Toutes les idées pourquoi les événements sont bloqués se? Y at-il une meilleure façon de le faire?
J'ai lu plusieurs messages et googlé un peu, mais ne l'ai pas vu quoi que ce soit très pertinent.

Toute aide appréciée.

: pb:

Était-ce utile?

La solution

Essayez de régler userInteractionEnabled NO sur votre point de vue variateur. Cela devrait dire le point de vue de ne pas interagir avec les événements tactiles, ce qui devrait leur permettre de continuer jusqu'à la vue sous le variateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top