Изменить кадр 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;

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

Я бы учел отрицательные и положительные значения, а ноль - без изменений.

Что, вы парни, думаете?

Другое решение

view.frame = CGRectOffset( view.frame, 0, 5 );

У меня есть макрос на 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);
Другие вопросы по тегам