【问题标题】:iPhone: Replacing UIView with itself (resetting view)iPhone:用自身替换 UIView(重置视图)
【发布时间】:2012-01-29 12:32:31
【问题描述】:

我有一个代表游戏屏幕的 UIView。我有一个重置按钮,允许用户重播该级别。对于重置,尽管我想将所有 UI 控件重置为其默认状态,因为完成后会发生各种动画,淡入/淡出文本并在图像周围移动等。

我想做的是将现有的 UIView 替换为自身的另一个副本(带有动画)。如何在不破坏 UINavigation 堆栈的情况下做到这一点?当用户在新屏幕上按回时,我希望他们转到原始父级 UIView 而不是被替换的游戏屏幕。

【问题讨论】:

标签: iphone objective-c uiview uinavigationcontroller


【解决方案1】:

我使用蒙版视图做类似的事情。

  1. 创建一个遮罩视图,一个 UIView 设置为您的起始视图(或只是一个图像)。
  2. 制作从游戏视图到蒙版视图的过渡动画。
  3. 重置您的游戏视图。
  4. 移除您的遮罩视图,显示您的游戏视图。

这样做不会破坏您的 UINavigation 堆栈,因为您实际上只使用一个活动视图(游戏视图)和一个静态蒙版来覆盖您的视图以进行转换。

【讨论】:

    【解决方案2】:

    在您的控制器堆栈的顶部,您大概有“拥有游戏视图”的控制器?

    我还假设您在控制器中使用自定义视图来执行大部分视图操作。

    如果是这种情况,那么您应该能够分配、初始化您的游戏视图的另一个实例,该实例将处于默认状态。将其 alpha 设置为 0.0f 并将其添加到视图层次结构中,然后将其 alpha 设置为 1.0f 并在动画完成块中删除并释放您不再需要的已售视图。

    或者,您可以定义开始条件、位置、值等,然后在按下按钮时将动画返回到它们。

    希望这会有所帮助:)

    【讨论】:

    • 嘿,这基本上是正确的,我目前重置了我的自定义视图,但重置视图上的所有其他 UI 元素让我很头疼 :)
    • 你还想重置什么?
    • 嗯,我有游戏板(我修改的只是一个位图),然后是各种 UI 元素,例如标签和支持图像。这些都在完成后移动,因此必须重新设置
    【解决方案3】:

    我假设您有代码来初始化所有子视图和与游戏相关的数据成员,对吧?

    将该代码移至单独的方法,并让重置按钮调用该方法。

    我通常在我创建的每个自定义视图上都有一个 -setupSubviews 方法,并且每次我需要将视图重置为其原始状态时都会调用它,例如:

    - (void)setupSubviews
    {
        _titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
        [self addSubview:_titleLabel];
    
        _activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectZero];
        _activityIndicator.hidesWhenStopped = YES;
        [self addSubview:_activityIndicator];
    
        _loading = NO;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-14
      • 2017-01-06
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      相关资源
      最近更新 更多