4

私はobjective-jとフレームワークにまったく慣れていないので、ドリルダウンしていくつかのコードを理解しようとしましたが、オブジェクト(または構造体)CGRectで迷子になっています。

完全なドキュメントは次のとおりです:カプチーノ

さて、今私はドリルダウンしていて、CPViewクラスがどのように機能するかを学ぼうとしています:CPView.j

今、私はいたるところにCGRectオブジェクト(または構造)を見て、CGRectがどこで定義されているかを一生理解することはできません。これはどのように作動しますか?何かが足りないような気がします。

私が見つけた最も近いものはCGGeometry.jCGGeometry.hですが、それでもCGRect構造またはオブジェクトは定義されていません。

誰かが私を助けることができますか?CGRect構造体またはオブジェクトをインスタンス化するにはどうすればよいですか?また、どこで定義されていますか?何が含まれていますか?などなど...

CGRectを作成する主な方法は、ここで説明するCGRectMake関数を使用することです。

これがどのように機能しているかを把握しているような気がしません。

ありがとうございました。

アップデート:

コードをもう少し見てみると、23行目、30行目、37行目は、JavaScriptオブジェクトの説明のように見えます。これは正しいです?よくわかりません...これらの.jファイルを翻訳しているものは、CGRectがすでに何であるかを認識していますか?これが、(CGRect)タイプのカーストとオブジェクトを使用できる理由ですか?CGRectsは、これまでに使用した他のオブジェクトと同じではないようです。その理由を知りたいです:)。

再度、感謝します。

00023 #define _CGPointMake(x_, y_) { x:x_, y:y_ }
00024 #define _CGPointMakeCopy(aPoint) _CGPointMake(aPoint.x, aPoint.y)
00025 #define _CGPointMakeZero() _CGPointMake(0.0, 0.0)
00026 
00027 #define _CGPointEqualToPoint(lhsPoint, rhsPoint) (lhsPoint.x == rhsPoint.x && lhsPoint.y == rhsPoint.y)
00028 #define _CGStringFromPoint(aPoint) ("{" + aPoint.x + ", " + aPoint.y + "}")
00029 
00030 #define _CGSizeMake(width_, height_) { width:width_, height:height_ }
00031 #define _CGSizeMakeCopy(aSize) _CGSizeMake(aSize.width, aSize.height)
00032 #define _CGSizeMakeZero() _CGSizeMake(0.0, 0.0)
00033 
00034 #define _CGSizeEqualToSize(lhsSize, rhsSize) (lhsSize.width == rhsSize.width && lhsSize.height == rhsSize.height)
00035 #define _CGStringFromSize(aSize) ("{" + aSize.width + ", " + aSize.height + "}")
00036 
00037 #define _CGRectMake(x, y, width, height) { origin: _CGPointMake(x, y), size: _CGSizeMake(width, height) }
4

1 に答える 1

3

簡単な答えは「はい」です。CGRectsは他のカプチーノオブジェクトとは異なります。CGRectsはCPObjectsではなく、x、y、width、heightのメンバーを持つ単なるJavascriptオブジェクトです。CGRectMakeなどを使用して作成すると、実際には次のような単純な関数が呼び出されます。

function CGRectMake(_x, _y, _width, _height) 
{ 
    return { 
        origin: { x:_x, y:_y }, 
        size: { width: _width, height: _height } 
    };
}

見つけた宣言は、パフォーマンスを向上させるためにCappuccino自体がCGRectMake関数をインライン化するために使用するマクロです。マクロは、1日の終わりに、独自のコードで使用されるエクスポートされたCGRectMake関数を実際に定義するために使用されます(これが、上記のスニペットが単なる概算である理由です)。

于 2010-07-24T02:10:03.673 に答える