更容易修改UIView框架?

时间:2013-01-09 20:18:20

标签: ios objective-c cocoa-touch uiview cgrectmake

通常我需要简单地将视图向下移动5个像素。 我的方法是这样的

view.frame = CGRectMake(view.frame.origin.x,
                        view.frame.origin.y + 5,
                        view.frame.size.width,
                        view.frame.size.height);

有没有更简单的方法? : - /

7 个答案:

答案 0 :(得分:3)

另一种解决方案

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

答案 1 :(得分:1)

我在github上有一个宏,可以让你像

一样
@morph(view.frame, _.origin.y += 5);

或者,如果您想更改y height

@morph(view.frame, {
    _.origin.y += 5;
    _.size.height -= 5;
});

答案 2 :(得分:0)

略好一点:

view.center = CGPointMake(view.center.x, view.center.y+5);

答案 3 :(得分:0)

我有这些宏:

#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);

答案 4 :(得分:0)

也许我应该为UIView类写一堆类别。

这样的东西
-(void)changeFrameOriginHorizontally:(NSInteger)paramHorizontalChange
                          vertically:(NSInteger)paramVerticalChange;

-(void)changeFrameSizeHorizontally:(NSInteger)paramHorizontalChange
                        vertically:(NSinteger)paramVerticalChange;

我不喜欢原帖中的解决方案的主要原因是它的代码感非常不友好且过于冗长。

我会允许负值和正值,而nil则没有变化。

你们有什么想法?

答案 5 :(得分:0)

如果你想去类别路线,你应该给它一个前缀,以避免方法名称冲突。

e.g。

- (void)ps_addOffset:(CGPoint)offset;
{
    self.frame = CGRectIntegral(CGRectOffset(self.frame, offset.x, offset.y));
}

答案 6 :(得分:0)

我喜欢使用宏:

#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);