2

これを行うのに問題があります:

CALayer *myLayer = myUIImageView.layer; //works, no error from compiler
CGRect visRect = myLayer.visibleRect; //fat error, see below

私が得るエラーは次のとおりです。

エラー: 構造体または共用体ではないメンバー 'visibleRect' の要求

しかし、ドキュメントには次のように書かれています:

visibleRect レシーバーの可視領域を独自の座標空間で返します。(読み取り専用) @property(読み取り専用) CGRect visibleRect

QuartzCore.framework、CoreGraphics.framework、UIKit.framework、Foundation.framework を含めました。

それが CGRect を返す場合、なぜ機能しないのでしょうか? 何か案が?

4

2 に答える 2

9

import ステートメントが欠落していると 99% 確信しています。プロジェクトにフレームワークを含めるだけでは十分ではありません。

まったく新しいプロジェクトでこれを試したところ、期待どおりに機能しました。以下はViewControllerに追加したものです。

#import <QuartzCore/QuartzCore.h>

...

- (void)viewDidLoad
{
    [super viewDidLoad];
    CALayer *test_layer = self.view.layer;
    CGRect test_rect = test_layer.visibleRect;
    NSLog(@"%f, %f", test_rect.origin.x, 
          test_rect.size.width);
}

出力は次のとおりです。

2009-04-21 17:53:55.999 Throwaway[72422:20b] 0.000000, 320.000000
于 2009-04-22T00:54:58.507 に答える
2

あなたのコードは正しいようです。危険な可能性があるものは何も保持していませんが、技術的には間違っていません。

以下のメッセージは通常、myLayer に問題があることを意味します。

error: request for member 'visibleRect' in something not a structure or union

2 行のコードの間で何かをしていますか?

myLayer オブジェクトを調べて、正しいことを確認してください。また、myUIImageView が nil ではなく初期化されていることを確認します。

また、呼び出して、プロパティをバイパスしてみてください[myLayer visibleRect];

于 2009-04-21T18:07:00.017 に答える