设置和使用obj-c CGPoint,CGRect等

Joe*_*oey 5 struct objective-c

我有三个问题围绕着我认为obj-c中的结构主题

1)为什么我经常(或总是)不能获取CGPoint或CGRect的成员var并逐个设置值?我发现我必须这样做:

CGPoint point;
point.x = someValue;
point.y = someOtherValue;
obj.myPoint = point;
Run Code Online (Sandbox Code Playgroud)

而不仅仅是obj.myPoint.x = someValue等.

2)这种行为在obj-c中的所有结构中是否一致?

3)是否有一种简单的方法来添加两个CGPoints?好像应该已经存在,但我找不到一个.我认为如果在将dest var设置为temp var之前必须使用临时CGPoint在两个CGPoints之间累积值(因为不能只执行pointA.x + = pointB.x),这会很麻烦y)相同.

Rob*_*und 11

1)从@sb回答Cocoa Objective-c Property C结构赋值失败

那将无法完成任何事情,因为[t member]返回一个结构,这是一个"r值",即.一个仅在作业右侧使用的值.它有一个值,但试图改变这个值是没有意义的.

基本上你只需要忍受从函数返回时不能直接设置struct的字段的事实.

2)是的

3)不幸的是,我不认为有一个内置的方便方法来添加两个CGPoint.如果你发现自己经常这样做,你可以自己做:

CGPoint CGPointAdd(CGPoint p1, CGPoint p2)
{
    return CGPointMake(p1.x + p2.x, p1.y + p2.y);
}  
Run Code Online (Sandbox Code Playgroud)

然后使用它像:

obj.pointA = CGPointAdd(obj.pointA, pointB);

没有那么优雅,obj.pointA.X += ...但有时生活不公平.


v01*_*01d 0

这是完全正常的。'obj' 拥有该 var 并具有 getter 和 setter,您无法修改该变量的部分内容。

最好的办法是复制结构并修改您需要的任何内容。

另请注意,您可以使用 CGPointMake(x, y) 函数(对于所有 CG 结构都相同),这要容易得多。

要更新这是最简单的:

CGPoint point = obj.myPoint;
point.x += 10.0f;
obj.myPoint = point;
Run Code Online (Sandbox Code Playgroud)

Obj-C 2.0 隐藏了 getter 和 setter,如下所示:

CGPoint point = [obj myPoint];
point.x += 10.0f;
[obj setMyPoint:point];
Run Code Online (Sandbox Code Playgroud)