【问题标题】:At which point can I securely access the frame in a UIImageView subclass?在什么时候我可以安全地访问 UIImageView 子类中的框架?
【发布时间】:2009-05-17 00:23:10
【问题描述】:

我对 UIImageView 进行了子类化。之后

self = [super initWithImage:image]

我尝试访问 self.frame.origin.y 值。但它始终为 0.0。片刻之后,在一个从外部调用的方法中,该属性完全存在,并且有一个不错的 100.0。

我也尝试过覆盖-(id)initWithFrame:(CGRect)aRect,但结果是一样的。将视图添加到某个超级视图后,该属性是否首先正确设置?我相信我试图在对象被分配和初始化之后直接获取框架矩形,但在它被添加到超级视图之前。这会在一行之后发生。

【问题讨论】:

    标签: iphone cocoa-touch uikit


    【解决方案1】:

    可以随时设置对象的框架。如果你想监控框架的变化,覆盖setFrame:setBounds:

    - (void)setFrame:(CGRect)frame
    {
        [super setFrame:frame];
        // Your code here
    }
    - (void)setBounds:(CGRect)bounds
    {
        [super setBounds:bounds];
        // Your code here
    }
    

    【讨论】:

    • 谢谢。这将是备份原始框架矩形的一个好点,但是一旦我进行旋转等转换,它就会被调用。无论如何,知道非常有用!
    【解决方案2】:

    我无法重现此问题,但我不得不进行一些插值以猜测您期望 100 来自何处。你在哪里设置?这似乎工作正常:

    - (id)initWithImage:(UIImage*)image {
        self = [super initWithImage:image];
        if (self != nil)
        {
            CGRect frame = self.frame;
            frame.origin = CGPointMake(100.0, 100.0);
            self.frame = frame;
            NSLog(@"y=%d", self.frame.origin.y);
            NSLog(@"frame=%@", NSStringFromCGRect(self.frame));
        }
        return self;
    }
    

    也许你可以提供一段更大的代码?

    【讨论】:

    • 我发现框架矩形不会被设置为任何东西,直到我将新分配的视图添加到子视图中。我有一个创建对象的数据提供者,将其添加到数组中并返回它。此时,还没有设置 frame 属性,因为这将在稍后的 for-in-loop 中完成。
    猜你喜欢
    • 2016-03-03
    • 1970-01-01
    • 2015-10-02
    • 2020-03-14
    • 2012-12-06
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多