Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS中的-(CGRect*)帧方法是什么?_Ios_Objective C_Uiview_Uiviewcontroller_Properties - Fatal编程技术网

iOS中的-(CGRect*)帧方法是什么?

iOS中的-(CGRect*)帧方法是什么?,ios,objective-c,uiview,uiviewcontroller,properties,Ios,Objective C,Uiview,Uiviewcontroller,Properties,代码: if (!CGRectContainsPoint([[viewArray objectAtIndex:0] frame], CGPointMake(newX, newY)) ) { .... } 问题: 我想在视图数组中获取UIView的“frame”值,所以我使用了以下方法: ((UIView *)[viewArray objectAtIndex:0]).frame 我使用(UIView*)强制将id对象转换为UIView,否则将触发类似“在类型为“id”的对象上找

代码:

if (!CGRectContainsPoint([[viewArray objectAtIndex:0]  frame], CGPointMake(newX, newY)) )
{
     ....
}
  • 问题:
  • 我想在视图数组中获取UIView的“frame”值,所以我使用了以下方法:

     ((UIView *)[viewArray objectAtIndex:0]).frame
    
    我使用(UIView*)强制将id对象转换为UIView,否则将触发类似“在类型为“id”的对象上找不到属性“frame”的错误”。但下面的方法似乎成功地避免了此错误:

      [[viewArray objectAtIndex:0] frame]
    
    那么[id frame]可以自动检测id的真实类型,然后让它调用该方法吗? 我真的很想知道这样的方法 [id frame]——id的实际类型是UIView [id view]——id的实际类型是UIViewController

    这些方法是getter方法还是setter方法?我看不出有什么不同,苹果公司的文件显示:

     @property(nonatomic) CGRect frame
    

    谢谢你的帮助

    最后调用的方法是
    -(CGRect)帧。使用点语法只是objective-c编译器提供的一种语法糖。为了让这个糖起作用,编译器需要知道它使用的对象的类型


    另一方面,objective-c使用消息传递来调用方法。这意味着当您使用语法
    [id message]
    时,它将尝试在
    id
    上执行选择器
    @selector(message)
    id
    是一种特殊类型,表示运行时的任何对象,它接受每个选择器,如果对象无法执行它,它将在运行时引发未知选择器异常。

    通过定义一个属性,如:
    @property(nonatomic)CGRect frame
    该属性同时充当getter和setter

    例如,要修改框架的宽度,可以编写:

    CGRect frame = myView.frame;
    frame.size.width = 100;
    myView.frame = frame;
    

    有关点表示法的详细说明,请参阅此页。

    读者,如果我错了,请纠正我。这是我对objective-c如何工作的理解,但我不想给OP错误的信息。当你说“为了让这糖工作…”时,我怀疑你是对的,但我想知道为什么它需要做的不仅仅是转换语法。