【问题标题】:CGRectMake alternativeCGRect制作替代品
【发布时间】:2012-08-07 08:45:25
【问题描述】:

我已经看到了使用CGRectMake() 来初始化CGRect 变量的替代方法:

CGRect 框架 = (CGRect){0,0,10,10};

我的问题是,CGRect frame = (CGRect){0,0,10,10}; 是如何工作的?幕后发生了什么?看起来正在初始化一个 c 样式数组 ({x,y,w,h}),然后将其转换为 CGRect 结构 - 这是正确的吗?如果是这样,如何将 c 样式数组转换为结构?

注意我不是在问是否适合使用上述替代 CGRectMake(),我只是想了解它为什么/如何工作。

【问题讨论】:

  • 如果两个语句创建相同的字节序列,它就可以工作。但是,我很困惑您使用的是 0 和 10 而不是 0.0 和 10.0。 0 和 10 将被编译为整数常量,而 0.0 和 10.0 将作为浮点/双精度常量出现。因此,我怀疑您是否可以将浮动用作任何有用的法律框架。 CGRect 是由 CGPoint 和 CGSize 组成的结构。它们都由两个 CGFload 成员组成(在 CGPoint 的情况下为 x 和 y,在 CGSize 的情况下为宽度和高度)。

标签: objective-c c struct cgrect cgrectmake


【解决方案1】:

这是一个所谓的复合字面量。您可以在 Mike Ash 的这篇文章中了解更多关于它们的信息:Friday Q&A 2011-02-18: Compound Literals

【讨论】:

    【解决方案2】:

    你可以这样使用:

    CGRect rect = CGRectFromString(@"{{0, 0}, {612, 892}}"); // it contents { CGPoint origin;CGSize size;};
    NSLog(@"rect : %@",NSStringFromCGRect(rect));
    

    【讨论】:

      【解决方案3】:

      检查一下:

      CGPoint origin = {10, 20};
      CGSize size = {100, 200};
      CGRect rect = {origin, size};
      

      【讨论】:

        猜你喜欢
        • 2015-06-04
        • 1970-01-01
        • 1970-01-01
        • 2010-09-28
        • 2012-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-04
        相关资源
        最近更新 更多