Ahmed Khalafの答えが好きでしたが、いくつかの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);
さらにファンシーになりましょう(1年後に更新しました)
ただし、これには冗長性self.frame
があります。これを修正するには、次のようなメソッドを使用してcategory
onを追加できます。UIView
- (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;
}
楽しみ。