iOS: [X convertPoint: somePoint toView: nil]; Не удалось вернуть оконные координаты - PullRequest
1 голос
/ 24 ноября 2010

Я пишу метод, который должен получить точку: 'in_centre', которая будет находиться в системе координат текущего представления (также передается как другой параметр: 'target')

Мне нужнопреобразуйте эту точку в координаты окна.

В документации сказано, что я должен сделать это, установив здесь второй параметр nil:

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

Но вывод показывает, что он ничего не делает.

2010-11-24 07: 32: 45.815 ChordWheel [3195: 207] передан (vc): {150, 150}
2010-11-24 07: 32: 45.816 ChordWheel [3195: 207] centerPoint_wc: {150, 150}

Это неправильно - это должен быть центр экрана iPhone: {160, 240}

Что происходит?

РЕДАКТИРОВАТЬ: спасибо за эти предложения - я попробовал их и до сих пор не радует:

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

Ответы [ 2 ]

0 голосов
/ 24 ноября 2010

Почему бы не попробовать альтернативы и посмотреть, как они работают?

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

И, возможно, координаты, которые вы получаете, на самом деле являются правильными координатами в базовом окне, но они просто не те, которые вам нужны.

0 голосов
/ 24 ноября 2010

Это сработало для меня в последний раз, когда я проверял, но оно могло меняться между выпусками ОС. Вы можете использовать [v convertPoint:p toView:v.window] (окно является видом), но это может вернуть что-то другое для окон, которые не являются полноэкранными (например, «базовые координаты окна» могут быть относительно экрана, на котором находится окно, например, вместо относительно верхнего левого угла окна).

...