为什么我不能在iPhone SDK中访问CALayer的visibleRect属性?

时间:2009-04-21 17:08:19

标签: iphone calayer

我无法做到这一点:

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

我得到的错误是:

  

错误:请求会员   “visibleRect”中的某些东西不是   结构或联盟

但文档说:

  

的visibleRect   返回可见区域   接收器,在它自己的坐标   空间。 (只读)@property(readonly)   CGRect visibleRect

我已经收录了QuartzCore.framework,CoreGraphics.framework,UIKit.framework,Foundation.framework。

因此,如果返回CGRect,为什么它不起作用?有什么想法吗?

2 个答案:

答案 0 :(得分:9)

我99%肯定你错过了import语句。仅仅在项目中包含框架是不够的。

我刚刚在一个全新的项目上试过这个,它按预期工作。以下是我添加到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

答案 1 :(得分:2)

您的代码看起来是正确的。你没有保留任何可能危险的东西,但技术上并没有错。

以下消息通常意味着myLayer出现问题。

  

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

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

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

此外,请尝试通过调用[myLayer visibleRect];

来绕过属性