【问题标题】:Animations inside of layoutSubviews?layoutSubviews 内的动画?
【发布时间】:2012-01-23 11:28:58
【问题描述】:

我有一个视图 (LSTabBarView),它支持使用以下方法插入/删除新元素:

- (void)insertItem:(LSTabItem *)item atIndex:(NSUInteger)index animated:(BOOL)animated; 
- (void)removeItemAtIndex:(NSUInteger)index animated:(BOOL)animated;

LSTabItem 是代表我的模型类的对象。每次使用 insertItem:atIndex:animated 添加新元素时:使用此模型对象内部的信息创建一个新的子视图(LSTabControl),然后添加到主视图,最后调用 layoutSubviews 重新计算每个子视图的框架子视图。

我刚刚实现了这些操作,但是“动画”参数暂时没有使用,我想知道当动画是 YES 时我应该把处理动画的代码放在哪里。

这些是相关的方法:

- (void)insertItem:(LSTabItem *)item 
           atIndex:(NSUInteger)index 
          animated:(BOOL)animated 
{
    ...
    LSTabControl *tab = [self _configureNewTabControlForItem:item atIndex:index];
    [tabItems insertObject:item atIndex:index]; 
    [tabViews insertObject:tab atIndex:index]; // array which contains all the subviews

    [self setNeedsLayout];
}

- (void)removeItemAtIndex:(NSUInteger)index 
                 animated:(BOOL)animated 
{
    ...
    LSTabControl *tab = [tabViews objectAtIndex:index];
    ...
    [tab removeFromSuperview];

    [tabViews removeObjectAtIndex:index];
    [tabItems removeObjectAtIndex:index];

    [self setNeedsLayout];
}

layoutSubviews 所做的基本上是将每个子视图放在一个线性水平序列中,一个接一个地在每个子视图之间应用填充。每个子视图可以有不同的宽度或高度(它们不是固定大小)。 当添加一个新元素并将动画设置为 YES(让我们说在 index=2 处)时,我希望从 index+1 到 numberOfElements 的每个子视图都向右移动,然后新的子视图出现在可用的孔中。

我显然希望 LSTabBarView 是可扩展的,因此在这些方法的基本实现中,我无法假设子视图将如何按子类排列(例如,子类可能会覆盖 layoutSubviews 并决定以垂直布局布局元素而不是水平的,因此决定在添加新元素时将每个子视图向下而不是向右移动......)

我不想知道如何执行动画(我已经知道怎么做)但是考虑到我上面描述的要求,如何为新子视图的外观设置动画的正确方法是什么。

我应该考虑在 layoutSubviews 内执行所有动画,还是将动画代码放在 insertItem/removeItem 内,让 layoutSubviews 只计算子视图布局?

谢谢

【问题讨论】:

    标签: ios uiview uiviewanimation layoutsubviews


    【解决方案1】:

    layoutSubviews 是一次性快速方法。最好使用您的insertItem: 制作动画。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 2013-03-14
      • 2020-09-30
      • 1970-01-01
      • 2015-07-09
      • 2021-06-12
      • 1970-01-01
      相关资源
      最近更新 更多