Функция iOS говорит CGRectMinY, который должен быть в нижнем левом углу

Согласно документации Apple,

CGRectMinY(CGRect) rect возвращает координату y верхнего правого угла указанного прямоугольника.

Разве это не должен быть нижний левый угол прямоугольника? Потому что я думаю, что ось Y направлена ​​вниз.


person tranvutuan    schedule 04.06.2012    source источник
comment
Я обратил внимание на этот запутанный фрагмент документации. Пожалуйста, обманите, если вы хотите, чтобы это было исправлено! openradar.appspot.com/radar?id=2876407   -  person Zev Eisenberg    schedule 28.03.2013
comment
Я думаю, что урок здесь заключается в том, чтобы не использовать эту функцию.   -  person Danyal Aytekin    schedule 25.10.2013


Ответы (2)


Если это для iOS, я думаю, что ваша функция неверна.

http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGGeometry/Reference/reference.html

CGRectGetMinY

Возвращает координату y, которая устанавливает нижний край прямоугольника.

CGFloat CGRectGetMinY (прямая CGRect);

Параметры

прямой

The rectangle to examine. 

Возвращаемое значение

Y-координата нижнего левого угла указанного прямоугольника. Доступность

Available in iOS 2.0 and later.

Связанный пример кода

HeadsUpUI
oalTouch
PhotoScroller
QuartzDemo
SpeakHere

Заявлено в CGGeometry.h

Изменить: чтобы устранить путаницу. «CGRectGetMinY» — это функция, которую следует использовать в CGRect, это означает, что она вернет результат, как если бы она рассматривала только прямоугольник. Например:

// With a self created element

CGRect rect = CGRectMake(0, 429, 100, 44);

NSLog(@"rect.origin.y: %f",rect.origin.y);
NSLog(@"rect.size.height: %f",rect.size.height);
NSLog(@"CGRectGetMinY(rect): %f",CGRectGetMinY(rect));
NSLog(@"CGRectGetMaxY(rect): %f",CGRectGetMaxY(rect));

возвращается

2012-06-04 10:55:49.737 test[7613:707] rect.origin.y: 429.000000
2012-06-04 10:55:49.739 test[7613:707] rect.size.height: 44.000000
2012-06-04 10:55:49.741 test[7613:707] CGRectGetMinY(rect): 429.000000
2012-06-04 10:55:49.748 test[7613:707] CGRectGetMaxY(rect): 473.000000

Ключ в том, чтобы ПРОСТО учитывать это, если вы запрашиваете минимальное значение, вы получите более низкое значение, чем если вы запрашиваете максимальное значение. Даже если подумать об этом без использования системы координат ios.

ТЕПЕРЬ ios перевернута, так что вы должны это учитывать, предыдущая функция будет работать, но визуально результат перевернут, потому что перевернута система.

// With an element on the screen

NSLog(@"gpsButton.frame.origin.y: %f",gpsButton.frame.origin.y);
NSLog(@"gpsButton.frame.size.height: %f",gpsButton.frame.size.height);
NSLog(@"CGRectGetMinY(gpsButton.frame): %f",CGRectGetMinY(gpsButton.frame));
NSLog(@"CGRectGetMaxY(gpsButton.frame): %f",CGRectGetMaxY(gpsButton.frame));

возвращается

2012-06-04 10:55:49.725 test[7613:707] gpsButton.frame.origin.y: 429.000000
2012-06-04 10:55:49.727 test[7613:707] gpsButton.frame.size.height: 44.000000
2012-06-04 10:55:49.732 test[7613:707] CGRectGetMinY(gpsButton.frame): 429.000000
2012-06-04 10:55:49.735 test[7613:707] CGRectGetMaxY(gpsButton.frame): 473.000000

Для человека, который это видит, тоже ничего страшного, min меньше max.

Таким образом, путаница в перевернутой системе ios, поскольку вы хотите получить визуально меньшее значение из перевернутой системы.

Вот почему кажется странным, что описание в CGGeometry сделано для «человеческого мира». Не для перевернутой системы ios.

person Pochi    schedule 04.06.2012
comment
вау, теперь я в замешательстве. похоже, что спрашивающий неверно процитировал документы, но эта неверная цитата имела смысл для меня. ваша цитата кажется точной, но теперь у меня тот же вопрос, что и у спрашивающего! почему minY ссылается на дно, когда система координат CGRect (например, view.bounds) имеет начало в верхнем левом углу. min ближе к происхождению, верно? а источник вверху справа? не должен ли min быть ближе к вершине? - person danh; 04.06.2012
comment
Поскольку это удобный метод для людей, поэтому, даже когда система координат ios является обратной, человек обычно хочет, чтобы точка была ближе к земле. А также из-за того, что если вам нужен верхний, вам просто нужно использовать frame/bounds.origin.y, в отличие от нижнего, где вам нужно будет использовать frame/bounds.origin.y + frame/bounds.size. высота - person Pochi; 04.06.2012
comment
@LuisOscar: ой, я процитировал не то. Это мое плохо. Если y направлен вниз (эквивалентно началу координат вверху слева), CGRectGetMinY должен быть вверху справа, а CGRectGetMax внизу слева. - person tranvutuan; 04.06.2012
comment
Я все еще в замешательстве (вместе с @ttran). Если люди говорили о разработчиках, то это совсем не удобно. Как человек-программист, которого попросили решить, находится ли точка над прямоугольником, я бы ожидал, что point.y ‹ CGRectGetMinY(rect) сработает. Я думаю, вы говорите (хорошо подтверждается документами), что это неправильно? - person danh; 04.06.2012
comment
эй, после того, как я посмотрел на картинку, нарисованную мной самим.... Я настроил ее.. Это довольно сложно.... это ссылка в конце концов должна быть полезной... - person tranvutuan; 04.06.2012
comment
@danh прочитал редактирование и приношу извинения за задержку с редактированием. - person Pochi; 04.06.2012
comment
@ttran да, это просто вопрос описания, и, учитывая перевернутую систему ios, многие описания не относятся к перевернутой системе. - person Pochi; 04.06.2012

Ось Y направлена ​​вниз, начиная с верхней левой точки вида. Таким образом, меньшие значения y находятся ближе к верхней части представления.

person danh    schedule 04.06.2012
comment
Если ось y направлена ​​вниз, должна ли ось ближе к верхней части вида быть эквивалентной правому верхнему углу вида? - person tranvutuan; 04.06.2012