Изменить кадр UIView легче?
Часто мне нужно просто переместить вид на 5 пикселей вниз. Мой подход такой
view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y + 5, view.frame.size.width, view.frame.size.height);
Нет ли более легкого пути?:-/
7 ответов
Возможно, я должен написать кучу категорий для класса UIView.
Что-то вроде
-(void)changeFrameOriginHorizontally:(NSInteger)paramHorizontalChange vertically:(NSInteger)paramVerticalChange; -(void)changeFrameSizeHorizontally:(NSInteger)paramHorizontalChange vertically:(NSinteger)paramVerticalChange;
Основная причина, по которой мне не нравится решение в моем первоначальном посте, заключается в том, что оно очень недружелюбно и слишком многословно.
Я бы учел отрицательные и положительные значения, а ноль - без изменений.
Что, вы парни, думаете?
У меня есть макрос на GitHub, который позволит вам сделать это как
@morph(view.frame, _.origin.y += 5);
Или если вы хотите изменить y
а также height
@morph(view.frame, {
_.origin.y += 5;
_.size.height -= 5;
});
У меня есть макрос для этих:
#define VIEW_INCREASE_Y(view, value) view.frame = CGRectMake(view.frame.origin.x,view.frame.origin.y+value,view.frame.size.width,view.frame.size.height)
Тогда вы можете сделать:
VIEW_INCREASE_Y(customView, 25);
Мне нравится использовать макросы:
#define width(a) a.frame.size.width
#define height(a) a.frame.size.height
#define top(a) a.frame.origin.y
#define left(a) a.frame.origin.x
#define bottom(a) top(a)+height(a)
#define right(a) left(a)+width(a)
#define FrameReposition(a,top,left) a.frame = CGRectMake(x, y, width(a), height(a))
.....
FrameReposition(myView,0,0);
Если вы хотите пройти маршрут категории, вы должны дать ему префикс, чтобы избежать конфликтов имен методов.
например
- (void)ps_addOffset:(CGPoint)offset;
{
self.frame = CGRectIntegral(CGRectOffset(self.frame, offset.x, offset.y));
}
Немного лучше:
view.center = CGPointMake(view.center.x, view.center.y+5);