通常我需要简单地将视图向下移动 5 个像素。我的做法是这样的
view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y + 5, view.frame.size.width, view.frame.size.height);
没有更简单的方法吗?:-/
通常我需要简单地将视图向下移动 5 个像素。我的做法是这样的
view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y + 5, view.frame.size.width, view.frame.size.height);
没有更简单的方法吗?:-/
另一种解决方案
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;
});
稍微好一些:
view.center = CGPointMake(view.center.x, view.center.y+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);
也许我应该为 UIView 类写一堆类别。
就像是
-(void)changeFrameOriginHorizontally:(NSInteger)paramHorizontalChange vertically:(NSInteger)paramVerticalChange; -(void)changeFrameSizeHorizontally:(NSInteger)paramHorizontalChange vertically:(NSinteger)paramVerticalChange;
我不喜欢原始帖子中的解决方案的主要原因是它对代码非常不友好且过于冗长。
我会允许负值和正值,nil 表示没有变化。
你们有什么感想?
如果你想走类别路线,你应该给它一个前缀以避免方法名称冲突。
例如
- (void)ps_addOffset:(CGPoint)offset;
{
self.frame = CGRectIntegral(CGRectOffset(self.frame, offset.x, offset.y));
}
我喜欢使用宏:
#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);