如何检测类的属性何时更改

时间:2013-03-25 03:49:51

标签: iphone ios objective-c ipad cocoa-touch

更改UIView的框架时,您有两种选择。第一种方法是将CGRect作为参数传递给视图的setFrame函数。另一种方法是将view.frame设置为等于CGRect

1) [view setFrame:frame];
2) view.frame = frame;

使用setFrame的{​​{1}}函数时,视图很容易检测到它应该更改其框架。但是,只需更改属性(UIView),视图如何检测其帧已更改(因为视图的帧立即更新)?

2 个答案:

答案 0 :(得分:4)

view.frame = frame等于[view setFrame:frame]。使用点方法设置属性与使用setXXX:XXX相同。您可以在NSLog中加setXXX:,然后致电obj.XXX = XXX;并检查控制台,看看是否已打印NSLog

示例: -

view.frame = frame; //If you set frame like this then

-(void)setFrame:(CGRect)frame
{
    //this will be call
}

答案 1 :(得分:4)

这就是Objective-C 2.0附带的点符号。它们主要用于获取和设置属性。

获取财产:view.frame。设置属性:view.frame = frame

但它们只是另一种方式或更简单的方式(syntactic sugar)来写:[view frame][view setFrame:frame]

他们就是这样,他们只是翻译成普通的Objective-C消息。事实上,因为它们只是翻译成消息,所以尝试类似:

view.setNeedsDisplay;

请注意,setNeedsDisplay不是实际属性,但由于它已转换为[view setNeedsDisplay],因此它将起作用!按照惯例,点符号仅用于获取和设置属性,因此我不建议使用view.setNeedsDisplay之类的内容。