在iOS中移动ui元素有更短的方法吗?

时间:2012-01-06 02:56:42

标签: ios uikit

我发现自己做了很多这样的事情:

webView.frame = CGRectMake(webView.frame.origin.x, otherView.frame.origin.y + otherView.frame.size.height + 10, webView.frame.size.width, webView.frame.size.height);

显然很多代码都会重复出现。我只是将元素向下移动,但我必须创建一个新的CGRect,因为我无法直接访问属性。

是否有一种更简单的方法可以在运行时移动元素而我错过了?

4 个答案:

答案 0 :(得分:4)

不是一种完全不同的方式,但如果你问我就更舒服:

CGRect newRect = webView.frame;
newRect.origin.y = otherView.frame.size.height+10;
webView.frame = newRect;

我发现这也更具可读性。在这个特殊的例子中,它减少了大约40%的字符! :P

答案 1 :(得分:2)

view.frame = CGRectOffset(view.frame, 5, 10);

答案 2 :(得分:1)

答案 3 :(得分:0)

@wasabii在减少代码量方面有正确答案,但另一种方法是在UIView上创建一个类别。以下是有关类别的一些文档:http://developer.apple.com/library/mac/#documentation/General/Conceptual/DevPedia-CocoaCore/Category.html

基本上,类别允许您向无法控制的类(甚至是您控制的类)添加功能。

Xcode 4.2提供了一个用于在新文件对话框下创建类别的模板,如果可以,请使用它。

在这种情况下,您可以使用名为

的方法在UIView上创建一个类别
-(void)moveDownByIncrement:(float)increment

然后按照你喜欢的方式实现移动代码(但实际上是使用@ wasabii的方法)。

有关类别的一些注意事项:

  1. 它们会影响类本身,因此当您向类别添加方法时,它可以在应用范围内使用。
  2. 如果您没有导入类别标题(在课堂上或在预处理中导入),当您尝试调用类别方法时,您将收到错误(或警告,具体取决于您的项目设置)。
  3. 使用命名空间定义类别,这可能会导致冲突。避免这种情况的最佳方法是使用项目特定的前缀为您添加的任何方法(以及类别名称本身)添加前缀。许多第三方库和开源项目在NSData上使用一个名为 - (NSString *)base64EncodedString的类别,因此请节省您的头痛并为该方法提供您自己类别中的前缀。
  4. 在类别上设置属性或ivars充其量是麻烦的,值得讨论它自己。如果您不知道该怎么做,就不要试试!