【问题标题】:Move multiple objects at once - iOS一次移动多个对象 - iOS
【发布时间】:2013-08-23 03:14:22
【问题描述】:

我有一个包含大约 10 个对象的视图,并且我已经为它们设置了所有单独的标签。我想将它们全部向上移动 20 个点,使它们的原始 Y 位置减去 20,使用 for 循环并遍历每个标签。我知道我可以做类似的事情

[self.view viewWithTag:i].frame = CGRectMake(X, Y-20, W, H);;

但这需要我给出 X、Y、宽度和高度。所以我的问题是,我怎样才能找到所有对象的原始坐标并将 X、W 和 H 设置为原始坐标并且只将 Y 向上移动?

任何提示将不胜感激。

谢谢

【问题讨论】:

    标签: ios objective-c frame cgrect cgrectmake


    【解决方案1】:

    只需将视图的新框架基于其当前框架:

    UIView* view = [self.view viewWithTag:i];
    CGRect frame = view.frame;
    frame.origin.y -= 20;
    view.frame = frame;
    

    【讨论】:

      【解决方案2】:

      为什么不将相同的标签应用于您要移动的所有视图。这样,您可以使用 for-in 语句并检查标签是否是您要移动的视图的标签,如果条件为真,则对视图应用仿射变换。使用视图的 transform 属性而不是直接修改框架将允许知道视图与其原始位置的确切偏移量。

      NSInteger myTag = 4;
      
      for (UIView *view in self.view.subviews) {
          if (view.tag == myTag) {
              [view setTransform:CGAffineTransformMakeTranslation(0.0f, - 20.0f)];
          }
      }
      

      【讨论】:

        【解决方案3】:

        我可能有一个想法,你可以试试。我在这里假设您只使用从 UIView 继承的对象,例如 UIButton、UILabel、UITextField 等。您可以首先将所有当前帧放入一个数组中,然后将所有元素放入一个数组中。这样,您可以循环第二个数组,并且对于每个元素,将 Y 设置为 array2[i]-20。

        NSMutableArray *currentFrames = [[NSMutableArray alloc] init];
        for(int i = 0; i<10; i++) //10 being the number of elements, assuming they have tags from 0 to 9
            [currentFrames addObject:[NSValue valueWithCGRect:[self.view viewWithTag:i].frame]];
        
        for(int i = 0; i<currentFrames.count; i++)
        {
            UIView *v = [self.view viewWithTag:i];
            [v setFrame:CGRectMake(v.frame.origin.x, v.frame.origin.y-20, v.frame.size.width, v.frame.size.height)];
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-24
          • 1970-01-01
          • 2013-08-28
          相关资源
          最近更新 更多