2012-07-27 16 views
24

Creo a livello di programmazione una scrollView e alcuni pulsanti al suo interno. Quando clicco su qualsiasi pulsante devo mostrare un popover.Come convertire il sistema di coordinate frame di SubView nel sistema di coordinate Self View

L'origine del mio pulsante in self.view è simile a (100,11) e all'interno di scrollView (9,11) e scrowView si trova da qualche parte in self.view. Il popover mostra in (9,11), ma quello giusto sarebbe (100,11). Provo ad usare convert senza successo.

-(IBAction)showPopover:(id)sender{ 
//... implemented popover above 

//Wrong Origin: 
NSLog(@"wrong x:%f y:%f",[sender frame].origin.x, [sender frame].origin.y); 

//Transform to correct 
CGRect frame = [self.view convertRect:[sender frame] toView:nil]; 

//Shoulf be right, but is not... 
NSLog(@"new x:%f y:%f",frame.origin.x, frame.origin.y); 
} 

Qualcuno può aiutarmi?

+2

si fa a prendere in considerazione scrollView.contentOffset? –

risposta

68

Il riquadro di una vista è già nel sistema di coordinate della superview. Così, se il setup è self.view contiene scrollview contiene sender:

CGRect frame = [sender.superview convertRect:sender.frame toView:self.view]; 

// or, better: 

CGRect frame = [sender convertRect:sender.bounds toView:self.view]; 
+1

Grande ... Grazie. –

+0

e se no? puoi condividere come farlo funzionare su qualsiasi configurazione? Credo che sia possibile in una sola riga. – Andy

+0

@Andy Funzionerà sempre quando 'sender' e' self.view' sono membri della stessa gerarchia di viste. Altrimenti la domanda non ha senso. –

7

Swift:

let frame = sender.convert(sender.bounds to: self.view) 
Problemi correlati