我想最初将CGPoint属性设置为特定点(屏幕中间).其他方法可能随后希望更改此属性.我的想法是在getter中将其初始化为空,但是我得到消息无效的参数类型'struct CGPoint'到一元表达式.我也试过使用if property == nil或0但没有快乐.
有什么想法吗?
-(CGPoint)graphOrigin
{
// initialise to centre of screen if has not been set
if(!_graphOrigin) // this expression is causing the problem
{
CGPoint origin = CGPointMake(self.bounds.origin.x + self.bounds.size.width / 2, self.bounds.origin.y + self.bounds.size.height / 2);
_graphOrigin = origin;
}
return _graphOrigin;
Run Code Online (Sandbox Code Playgroud)
}
mip*_*adi 31
A CGPoint是结构,因此您不能将其设置为nil或NULL(它不是指针).从某种意义上说,真的没有"未初始化"的状态.也许您可以{0.0, 0.0}用来指定未设置CGPoint,但这也是一个有效的坐标.或者您可以使用负数x和y值来标记"未初始化"点,因为负值不能是有效的绘图点,但这也是一种黑客攻击.
可能你最好的选择是做两件事之一:
CGPoint.NULL未初始化时,可以将此值设置为.当然,你不必担心malloc荷兰国际集团和free荷兰国际集团的价值.存储在最初设置为CGPoint的BOOL被调用者pointInitialized或某些人的旁边NO,但是YES一旦初始化该点就设置为.你甚至可以将它包装在一个结构中:
struct {
CGPoint point;
BOOL initialized;
} pointData;
Run Code Online (Sandbox Code Playgroud)Fra*_*eau 21
更简单的方法是将_graphOrigin初始化为CGRectZero并更改if语句:
if (!CGPointEqualToPoint(_graphOrigin, CGPointZero)) {
}
Run Code Online (Sandbox Code Playgroud)
ken*_*ytm 11
CGPoint没有未初始化的状态.但是,如果您将点(0,0)视为未初始化,则可以使用
if (_graphOrigin.x == 0 && _graphOrigin.y == 0)
{
...
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为当初始化Objective-C实例时,其所有ivar都被清除为零位,在CGFloat表示中为0.0.
(注意:==即使操作数是CGFloat,这里也没问题,因为我们想要与精确的位模式进行比较(忽略-0的问题))
由于CGPointZero(0,0)以及您提供的任何其他值可能存在于您的上下文中,您可能需要使用以下内容初始化NSValue:
NSValue *pointVal = [NSValue valueWithCGPoint:point];
Run Code Online (Sandbox Code Playgroud)
您可以根据某些条件执行此操作,然后稍后测试NSValue为零.NSValue也可以添加到一个数组中,这样您就可以根据需要获得一系列点数.
为了明白这一点,只需使用:
CGPoint point = [pointVal CGPointValue];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16770 次 |
| 最近记录: |