我喜欢Ahmed Khalaf's answer,但我突然想到,您不妨只写一些 C 函数……关键优势是,如果您遇到错误,则更容易追踪错误使用了错误的类型。
话虽如此,我用这些函数声明编写了一个 .h 文件:
CGRect CGRectSetWidth(CGRect rect, CGFloat width);
CGRect CGRectSetHeight(CGRect rect, CGFloat height);
CGRect CGRectSetSize(CGRect rect, CGSize size);
CGRect CGRectSetX(CGRect rect, CGFloat x);
CGRect CGRectSetY(CGRect rect, CGFloat y);
CGRect CGRectSetOrigin(CGRect rect, CGPoint origin);
还有一个对应的.m文件,里面有这些函数实现:
CGRect CGRectSetWidth(CGRect rect, CGFloat width) {
return CGRectMake(rect.origin.x, rect.origin.y, width, rect.size.height);
}
CGRect CGRectSetHeight(CGRect rect, CGFloat height) {
return CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, height);
}
CGRect CGRectSetSize(CGRect rect, CGSize size) {
return CGRectMake(rect.origin.x, rect.origin.y, size.width, size.height);
}
CGRect CGRectSetX(CGRect rect, CGFloat x) {
return CGRectMake(x, rect.origin.y, rect.size.width, rect.size.height);
}
CGRect CGRectSetY(CGRect rect, CGFloat y) {
return CGRectMake(rect.origin.x, y, rect.size.width, rect.size.height);
}
CGRect CGRectSetOrigin(CGRect rect, CGPoint origin) {
return CGRectMake(origin.x, origin.y, rect.size.width, rect.size.height);
}
所以,现在,要做你想做的事,你可以这样做:
self.frame = CGRectSetWidth(self.frame, 50);
让 Fancier(我一年后更新)
不过,这里面有一个多余的self.frame。要解决这个问题,您可以在 UIView 上添加一个 category,其方法如下所示:
- (void) setFrameWidth:(CGFloat)width {
self.frame = CGRectSetWidth(self.frame, width); // You could also use a full CGRectMake() function here, if you'd rather.
}
现在您只需输入:
[self setFrameWidth:50];
或者,甚至更好:
self.frameWidth = 50;
这样你就可以做这样的事情:
self.frameWidth = otherView.frameWidth; // as opposed to self.frameWidth = otherView.frame.size.width;
您还需要在您的类别中包含此内容:
- (CGFloat) frameWidth {
return self.frame.size.width;
}
享受吧。