2013-08-13 4 views
4

я пишу слишком много этого кода:Есть ли ярлык для (self.frame.origin.y + self.frame.size.height)?

self.frame.origin.y + self.frame.size.height 

Есть ли ярлык для этого? Что-то вроде self.frame.y_plus_height?

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

ответ

10

Это должно сделать трюк:

CGFloat res = CGRectGetMaxY(self.frame); 

документации можно найти here.

EDIT: в соответствии с разъяснениями от rob mayoff (см. Комментарии) это немного дороже, чем просто суммирование origin.y + size.height в коде.

+0

Я видел этот помощник в прошлом, никогда не использовал его. Вопрос, если он влияет на производительность? или компилятор оптимизирует его для встроенного кода frame.origin.y + frame.size.height? – user1105951

+2

Если я беру дикое предположение, я бы сказал, что он делает то же самое, что и «origin.x + size.height». Нашел хороший блог об этом (также о 'CGRectGetMaxY' ...): [CGGeometry] (http://nshipster.com/cggeometry/). Так что да, производительность должна быть одинаковой. –

+1

Это немного дороже, чем 'CGRect frame = self.frame; CGRect res = frame.origin.y + frame.origin.height; 'потому что' CGRectGetMaxY' сначала вызывает 'CGRectStandardize'. –

3

Отличная категория на UIView создатель: nfarina.

Проверьте пожалуйста here.

Используя эту категорию, вы можете получить «максимальную Y» или «дно» вид, как это (где self является вид):

CGFloat maxY = self.$bottom; 

Эта категория действительно удивительным, потому что она позволяет установить легко сфотографировать свойства. В примере, чтобы переместить вид на правый 3 пункта, вы можете сделать это:

self.$x += 3.0f; 
+0

круто. оттуда я тоже видел (возможно, чище ..): https://github.com/AlexDenisov/FrameAccessor – user1105951

2

Я понимаю, что это просят Objective-C, но для тех, кто использует Swift и наткнуться на этот вопрос, вы можете просто создать расширение CGRect:

extension CGRect { 
    func maxYinParentFrame() -> CGFloat { 
     return self.origin.y + self.size.height 
    } 
} 

Вы можете использовать его в любом месте.

let mySize = myView.frame.maxYinParentFrame() 
Смежные вопросы