2010-11-24 2 views
1

Ich bin ein Verfahren zu schreiben, die einen Punkt erhalten sollen: ‚in_centre‘, die in dem Koordinatensystem der aktuellen Ansicht sein werden (auch als ein anderer Parameter übergeben: ‚Ziel‘)iOS: [X convertPoint: somePoint toView: nil]; FAILS zum Fenster-Koord zurück

Ich muss diesen Punkt in Fensterkoordinaten umwandeln.

Die Dokumentation sagt, ich sollte dies tun, indem Sie den zweiten Parameter hier auf Null setzen:

centerPoint = [target convertPoint:in_centre toView:nil]; // get in Window Coords 
NSLog(@"passed in (vc): %@", NSStringFromCGPoint(in_centre)); 
NSLog(@"centerPoint_wc: %@", NSStringFromCGPoint(centerPoint)); 

Aber die Ausgabe zeigt, dass es nichts zu tun ist.

2010-11-24 07: 32: 45,815 ChordWheel [3195: 207] in (vc) bestanden: {150, 150}
2010-11-24 07: 32: 45.816 ChordWheel [3195: 207] centerPoint_wc : {150, 150}

das ist falsch - es sollte das Zentrum des iPhone-Bildschirm sein: {160, 240}

Was ist los?

EDIT: Danke für die Vorschläge - ich versuchte, sich und noch keine Freude:

- (id) initWithFrame: (CGRect) theFrame 
       target: (id) p_target 
    actionPlayChord: (SEL) p_actionPlayChord 
     actionSettings: (SEL) p_actionSettingsClick 
{ 
    target = p_target; 
    actionPlayChord = p_actionPlayChord; 

    self = [super initWithFrame: theFrame]; 

    if (! self) 
     return nil; 

    CGPoint centre = CGPointMake(theFrame.size.width/2.0, 
        theFrame.size.height/2.0); 

    CGPoint c_wc = [self convertPoint: centre toView: nil]; 
    CGPoint c_wc2 = [self convertPoint: centre toView: self.window]; 

    NSLog(NSStringFromCGRect(theFrame)); 
    NSLog(NSStringFromCGPoint(centre)); 
    NSLog(NSStringFromCGPoint(c_wc)); 
    NSLog(NSStringFromCGPoint(c_wc2)); 

2010-11-24 14: 33: 55,202 ChordWheel [3452: 207] {{10, 90} , {300, 300}}
2010-11-24 14: 33: 55.202 ChordWheel [3452: 207] {150, 150}
2010-11-24 14: 33: 55.203 ChordWheel [3452: 207] {150 150}
2010-11-24 14: 33: 55,204 ChordWheel [3452: 207] {150, 150}

+0

Sie könnten ungerades Verhalten sehen, wenn 'target' gleich null ist, da der Rückgabewert eines struct-reporting-Methodenaufrufs auf nil nicht definiert ist. –

Antwort

0

es ist für mich das letzte Mal habe ich überprüft, aber es kann haben sich zwischen OS-Versionen geändert. Sie können [v convertPoint:p toView:v.window] (ein Fenster ist eine Ansicht) verwenden, aber das könnte etwas anderes für Fenster zurückgeben, die keine Vollbildfenster sind ("Fensterbasiskoordinaten" könnten zum Beispiel relativ zu dem Bildschirm sein, in dem sich das Fenster befindet) relativ zur oberen linken Ecke des Fensters).

0

Warum nicht die Alternativen ausprobieren und sehen, wie sie funktionieren?

[target convertPoint:in_centre toView:target.window]
[target.window convertPoint:in_centre fromView:target]

Und vielleicht werden die Koordinaten Sie bekommen sind eigentlich die richtigen Koordinaten im Basisfenster, aber sie sind nur nicht die, die Sie möchten.

Verwandte Themen