菜鸟教程小白 发表于 2022-12-13 09:07:24

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


                                            <p><ol>
<li><p>代码:</p>

<pre><code>if (!CGRectContainsPoint([frame], CGPointMake(newX, newY)) )
{
   ....
}
</code></pre> </li>
<li>问题</li>
</ol>

<p>我想在 View 数组中获取 UIView 的“帧”值,所以我使用了这个:</p>

<pre><code> ((UIView *)).frame
</code></pre>

<p>我利用 (UIView *) 强制将 id 对象转换为 UIView,否则会触发错误,例如“在 'id' 类型的对象上找不到属性 'frame'”。但是下面的方法似乎成功地摆脱了这个错误:</p>

<pre><code>[ frame]
</code></pre>

<p>那么可以自动检测id的真实类型,然后让它调用方法吗?
我真的很想知道像这样的方法
----id的真实类型是UIView
----id的真实类型是UIViewController</p>

<p>这些方法是getter 方法还是setter 方法?我无法分辨差异,而苹果文档显示它们如下:</p>

<pre><code> @property(nonatomic) CGRect frame
</code></pre>

<p>非常感谢您的帮助!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>最后调用的方法是<code>-(CGRect)frame;</code>。使用点语法只是 Objective-c 编译器提供的语法糖。为了让这个糖起作用,编译器需要知道它使用的对象的类型。</p>

<p>另一方面,objective-c 使用消息传递来调用方法。这意味着当您使用语法 <code></code> 时,它将尝试在 <code>id</code> 上执行选择器 <code>@selector(message)</code>。 <code>id</code> 是一种特殊类型,表示运行时中的任何对象,它接受每个选择器,如果对象无法执行,它将在运行时抛出一个未知的选择器异常。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - iOS 中的 -(CGRect *)frame 方法是什么?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/31539589/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/31539589/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - iOS 中的 -(CGRect *)frame 方法是什么?