ConvertPoint: fromView: хорошо работает на симуляторе, а не на устройстве

Я был рад видеть это: ответ на вопрос о том, как конвертировать точку подвью и он отлично работал у меня на симуляторе.

Но по какой-то причине он не работает на устройстве... Может быть, позиции позиций по-разному управляются устройством - или это просто еще одна тайна? Или (надеюсь), я написал это неправильно, и вы, ребята, можете помочь... :)

здесь моя строка:

CGPoint yoel = [imagePressed.imageView convertPoint:imagePressed.frame.origin toView:nil];

Ответ 1

OK. это был урок в разнице между% d и% f:) по-видимому, он отлично работает.

Моя ошибка была у меня на симуляторе DLog(@"yoel is %f", yoel.x); DLog(@"yoel is %f", yoel.y); перед запуском на устройстве я изменил его на  DLog(@"yoel is %d", yoel.x); DLog(@"yoel is %d", yoel.y); поскольку CGPoint находится в float, я получил 0 вместо правильной координаты...

Еще один урок - я никогда не изменю код до того, как переключу тест с симулятора на устройство, чтобы не обвинять Apple, но сам:)

Ответ 2

У меня была другая проблема, связанная с этим вопросом, и заметила, что мне пришлось рассмотреть масштаб экрана при преобразовании прямоугольника. (то есть он работал на симуляторе не потому, что он был симулятором, а потому, что симулятор находился в режиме без сетчатки)

// the following convertRect is like asking a view: "what would one of your subviews (aView) have for a frame in my (toView) coordinate space if it were to become my subview?
    _originalFrame = [[aView superview] convertRect: aView.frame toView: self];

    CGFloat scale = [[UIScreen mainScreen] scale];

    _originalFrame.origin.x /= scale;
    _originalFrame.origin.y /= scale;
    _originalFrame.size.width /= scale;
    _originalFrame.size.height /= scale;

    NSLog(@"Converted Frame: %@", NSStringFromCGRect(_originalFrame));