在objective-c中,我经常在动画期间更新视图的帧。我目前有一个混乱的解决方案:
CGPoint newOrigin = CGPointMake(25.0, 25.0);
view.frame = CGRectMake(newOrigin.x, newOrigin.y, view.frame.size.width, view.frame.size.height);
我正在寻找的是一种简单的方便方法,其工作原理如下:
view.frame = CGRectWithNewOrigin(view.frame, newOrigin);
SDK中是否存在执行此操作的现有方法,还是需要定义自己的方法?
解决:0x7fffffff有正确的答案,但JackWu的建议是更好的方法:
Jack Wu提供的解决方案解决了我的问题。 iOS SDK没有这样做的方法,因此您需要定义自己的内联方法来执行此操作。但是,利用UIView的中心属性是一种更好的方法。无需定义内联函数,如果视图已应用了变换,它也将继续有效。
答案 0 :(得分:2)
很容易定义一个新的内联方法,就像已经使用过的方法一样,比如CGRectMake()..这样的事情怎么样?
static inline CGRect CGRectWithNewOrigin(CGPoint origin, CGRect frame) {
return CGRectMake(origin.x, origin.y, frame.size.width, frame.size.height);
}
然后像使用CGRect的任何其他功能一样使用它
CGPoint newOrigin = CGPointMake(25.0, 25.0);
CGRect newRect = CGRectWithNewOrigin(newOrigin, oldRect);
答案 1 :(得分:2)
CGRectOffset
做的事情(很多但不是所有情况):
返回一个原点偏离源矩形的矩形。
答案 2 :(得分:1)
这有效:
view.frame = (CGRect){.origin = newOrigin, .size = view.frame.size};
否则,您可以编写自己的C函数,我很确定不存在。 (我只看了CGGeometry.h
第一百次。)
虽然它比你要求的更为通用,但我经常认为这样的事情会有用:
static inline CGRect CGRectFromOriginSize(CGPoint origin, CGSize size) {
return (CGRect){.origin = newOrigin, .size = view.frame.size};;
}
答案 3 :(得分:0)
这很好用:
CGRect newFrame = view.frame;
newFrame.origin = CGPointMake(25.0, 25.0);
view.frame = newFrame;
答案 4 :(得分:0)
试试这个:
CGPoint newOrigin = CGPointMake(25.0, 25.0);
CGRect newFrame = view.frame;
newFrame.origin = newOrigin;
view.frame = newFrame;