Plo*_*lot 5 syntax objective-c cgrect cgrectmake
这是一个非常简单的问题,我似乎无法找到答案.这该怎么做 :
CGRectMake(1, 3, size)
Run Code Online (Sandbox Code Playgroud)
要么
CGRectMake(pointB, size)
Run Code Online (Sandbox Code Playgroud)
要么
CGRectMake(pointB, size.width, size.height)
Run Code Online (Sandbox Code Playgroud)
代替
CGRectMake(self.someview.frame.origin.x, self.someview.frame.origin.y, self.someotherview.frame.size.width, self.someotherview.frame.size.height)
Run Code Online (Sandbox Code Playgroud)
?? 谢谢 !:)
编辑:
该方法CGRectmake需要CGFloat.我希望它采取CGSize和/或CGpoint作为方法的参数.
我想这就是你的想法:
- (void) logRects
{
CGFloat
x = 10.0,
y = 20.0,
width = 50.0,
height = 60.0;
CGPoint point = {x, y};
CGSize size = {width, height};
CGRect rect1 = {1, 3, size};
CGRect rect2 = {point, size};
CGRect rect3 = {point, size.width, size.height};
//using designated (named) initialisers
CGRect rect4 = {.origin.x=3, .origin.y=5, .size = {100,100}};
//with designated initialisers, order doesn't matter
CGRect rect5 = {.size=size, .origin.x=3, .origin.y=5};
NSLog (@"rect1 %@",NSStringFromCGRect(rect1));
NSLog (@"rect2 %@",NSStringFromCGRect(rect2));
NSLog (@"rect3 %@",NSStringFromCGRect(rect3));
NSLog (@"rect4 %@",NSStringFromCGRect(rect4));
NSLog (@"rect5 %@",NSStringFromCGRect(rect5));
}
Run Code Online (Sandbox Code Playgroud)
但请注意这里的讨论:
为什么要使用像CGRectMake这样的函数?
这种复合文字语法在我看来更容易阅读和写入,虽然函数在未来的防范方面具有优势(+你得到自动完成).
更新
另见最近的q&a:
CGRectMake(1,3,大小):
CGRectMake(1, 3, size.width, size.heigh)
Run Code Online (Sandbox Code Playgroud)
CGRectMake(pointB,size):
CGRectMake(pointB.x, pointB.y, size.width, size.height)
Run Code Online (Sandbox Code Playgroud)
CGRectMake(pointB,size.width,size.height):
CGRectMake(pointB.x, pointB.y, size.width, size.height)
Run Code Online (Sandbox Code Playgroud)
CGRect看起来像这样:
struct CGRect {
CGPoint origin;
CGSize size;
};
typedef struct CGRect CGRect;
Run Code Online (Sandbox Code Playgroud)
CGPoint和CGSize看起来像这样:
struct CGPoint {
CGFloat x;
CGFloat y;
};
typedef struct CGPoint CGPoint;
struct CGSize {
CGFloat width;
CGFloat height;
};
typedef struct CGSize CGSize;
Run Code Online (Sandbox Code Playgroud)
CGRectMake是以下功能:
CG_INLINE CGRect
CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
{
CGRect rect;
rect.origin.x = x;
rect.origin.y = y;
rect.size.width = width;
rect.size.height = height;
return rect;
}
Run Code Online (Sandbox Code Playgroud)
所以代替:
CGRect r = CGRectMake(pointB.x, pointB.y, size.width, size.height)
Run Code Online (Sandbox Code Playgroud)
你可以简单地写:
CGRect r;
r.origin = pointB;
r.size = size;
Run Code Online (Sandbox Code Playgroud)
如果您想创建自己的CGRectMake,请随意这样做:
CG_INLINE CGRect
MyPrivateCGRectMake(CGPoint p, CGSize s)
{
CGRect rect;
rect.origin = p;
rect.size = s;
return rect;
}
Run Code Online (Sandbox Code Playgroud)
但是你无法改变现有函数接受的参数.
| 归档时间: |
|
| 查看次数: |
12481 次 |
| 最近记录: |