5

このメソッドがあるとします:

- (void)placeView:(UIView*)theView withCenterIn:(CGPoint)centerPoint;

そのため、ビューとポイントを渡してビューの中心にします。

しかし、中心を指定する必要はなく、ビューだけを指定する必要がある場合があります。

「nil」を渡すとエラーになります。

中心点の通過をスキップする方法を提案してください。

この方法を次のように使用する必要があることに注意してください。

- (void)placeView:(UIView*)theView withCenterIn:(CGPoint)centerPoint{
    if(centerPoint == nil){//and I understand that it's a wrong comparison, as I cannot pass "nil" to CGPoint
        //set a random center point
    }
    else{
        //set that view to the specified point
    }
}

前もって感謝します

4

2 に答える 2

13

これはnilオブジェクト専用でCGPointあり、struct. (dasblinkenlightがすでに言ったように。)

私のジオメトリ ライブラリでは、CGPoint「ポイントなし」のプレースホルダーとして使用する「null」と、それをテストする関数を定義しました。a のコンポーネントCGPointCGFloats であり、floats には既に "無効な値" の表現NAN(math.h で定義されている) があるため、これを使用するのが最善だと思います。

// Get NAN definition
#include <math.h>

const CGPoint WSSCGPointNull = {(CGFloat)NAN, (CGFloat)NAN};

BOOL WSSCGPointIsNull( CGPoint point ){
    return isnan(point.x) && isnan(point.y);
}
于 2012-08-16T18:05:01.163 に答える
5

CGPointは Cstructであり、それを渡すことはできませんnil。次のように、不要な をとらない別のメソッドを作成し、ステートメントCGPointを取り除くことができます。if

- (void)placeView:(UIView*)theView withCenterIn:(CGPoint)centerPoint{
    //set that view to the specified point
}

- (void)placeView:(UIView*)theView {
    //set a random center point
}

1 つの方法を保持することを主張する場合は、1 つのポイントを「特別な」(たとえば、CGMakePoint(CGFLOAT_MAX, CGFLOAT_MAX)) として指定し、 でラップして、 の#define代わりに使用できますnil

さらに別の解決策は、次のようにラップすることCGPointですNSValue

NSValue *v = [NSValue withPoint:CGMakePoint(12, 34)];
CGPoint p = [v pointValue];
于 2012-08-16T12:34:54.793 に答える