【问题标题】:How to create a "stretchable" UIView如何创建“可拉伸”的 UIView
【发布时间】:2011-07-16 05:31:57
【问题描述】:

我有一个包含另一个 UIView 的 UIView。外部 UIView 通过drawRect 在内部 UIView 周围绘制边框。 (边框太复杂,无法通过CALayer属性绘制。)

目前我在动画外层UIView的大小调整时,它的drawRect方法在动画开始时被调用一次,结果被拉伸或收缩。这看起来不太好。

我正在寻找一种方法来在动画的每一步重新绘制内容,或者找到一种方法来实现相同的视觉效果。 (结果应该类似于调整可拉伸 UIImage 的大小。)

【问题讨论】:

    标签: objective-c ios cocoa-touch animation


    【解决方案1】:

    您应该将视图的内容类型更改为:

    your_view.contentMode = UIViewContentModeRedraw;
    

    并且每次帧变化时都会重绘。

    【讨论】:

    • 不幸的是这不起作用,因为框架只改变一次。
    【解决方案2】:

    我最终添加了带有自动调整大小蒙版的子视图,使它们在动画期间保持正确定位。

    【讨论】:

      【解决方案3】:

      每次更改帧大小时,您都需要向视图发送 [UIView setNeedsToDisplay],您可以尝试覆盖 setFrame: 方法,例如

      - (void)setFrame:(CGRect)r
      {
          [super setFrame:r];
          [self setNeedsToDisplay];
      }
      

      【讨论】:

      • 如果您的视图有contentMode == UIViewContentModeRedraw,则不必调用setNeedsDisplay
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多