Ich bin mir sicher, dass dieses Problem wird leicht gelöst werden, aber ich bin relativ neu in iOS-Entwicklung. Ich versuche, Berührungsereignisse an Kinder zu übergeben, die in der Zeichenreihenfolge auf einer UIView niedriger sind. Zum Beispiel -Passenden Touch zu nächsten Responder oder andere Unteransicht iOS
Ich erstelle erweiterte UIImageView, um meine MoveableImage-Klasse zu erstellen. Diese Klasse ist nur UIImageView im Grunde, die die touchesBegan, touchesEnded und touchesMoved- implementiert
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self showFrame];
//if multitouch dont move
if([[event allTouches]count] > 1)
{
return;
}
UITouch *touch = [[event touchesForView:self] anyObject ];
// Animate the first touch
CGPoint colorPoint = [touch locationInView:self];
CGPoint touchPoint = [touch locationInView:self.superview];
//if color is alpha of 0 , they are touching the frame and bubble to next responder
UIColor *color = [self colorOfPoint:colorPoint];
[color getRed:NULL green:NULL blue:NULL alpha:&touchBeganAlpha];
NSLog(@"alpha : %f",touchBeganAlpha);
if(touchBeganAlpha > 0)
{
[self animateFirstTouchAtPoint:touchPoint];
}
else {
[super.nextResponder touchesBegan:touches withEvent:event];
}
}
So ist das Endergebnis im Grunde this- Wenn sie den Rahmen des Imageview und nicht das Bild im anderen Bild berühren, die sein wird, Darunter kann möglicherweise reagieren. Sehen Sie sich dieses Bild für ein Beispiel an.
Bisher habe ich versucht nächste Responder jedoch, dass löst nicht das Problem. Jede Hilfe würde sehr geschätzt werden!
Behoben - Ich habe aufgehört, die Alpha auf die Berührungen zu überprüfenBegan und touchesMoved. Ovveriding PointInside erlaubte der UIView, das für mich zu handhaben.
-(BOOL) pointInside:(CGPoint)point withEvent:(UIEvent *) event
{
BOOL superResult = [super pointInside:point withEvent:event];
if(!superResult)
{
return superResult;
}
if(CGPointEqualToPoint(point, self.previousTouchPoint))
{
return self.previousTouchHitTestResponse;
}else{
self.previousTouchPoint = point;
}
BOOL response = NO;
//if image is nil then return yes and fall back to super
if(self.image == nil)
{
response = YES;
}
response = [self isAlphaVisibleAtPoint:point];
self.previousTouchHitTestResponse = response;
return response;
}
Arbeitete super danke Mann! – thebringking