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

我 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

你在这两行代码之间做了什么吗?

检查 myLayer 对象,确保它是正确的。另外,确认 myUIImageView 已初始化,而不是 nil。

另外,尝试绕过属性,通过调用[myLayer visibleRect];

于 2009-04-21T18:07:00.017 回答