【问题标题】:Animated width label with swiftswift的动画宽度标签
【发布时间】:2015-09-22 20:52:35
【问题描述】:

自从我的 swift 代码以来,我想更改标签的宽度。 如果可能,请在动画程序中进行更改。是否可以 ? 当我这样做时:

self.lblChoice1.frame.size.width += 50

我的交换标签宽度不...为什么? 提前谢谢你。

编辑: 第一个响应不起作用。

print(self.lblChoice1.frame.size.width)
self.lblChoice1.frame.size.width += 150
self.lblChoice1.contentMode = UIViewContentMode.Redraw
self.lblChoice1.setNeedsDisplay()
print(self.lblChoice1.frame.size.width)

这段代码在我的控制台中很好地显示了我:

150.0
300.0

但是我的标签大小并没有改变显示...

【问题讨论】:

  • 为什么您认为您发布的代码应该为更改设置动画?
  • 不,但它应该改变我标签的宽度......
  • @hugo_082 从我所看到的你应该先从一些教程开始了解这个动画:raywenderlich.com/76200/basic-uiview-animation-swift-tutorial 或者你可以看看这个问题并回答stackoverflow.com/questions/27660540/…
  • 教程我已经看过了,我明白了。但是我明白为什么我在你上面贴的那行代码没有改变我标签的宽度?
  • 与 UI 相关的任务应始终在主队列上完成,因此如果您从不同的上下文/队列调用上面的该行,它将不起作用

标签: ios swift animation


【解决方案1】:

您正在更改框架,但您并没有告诉视图它需要重新绘制自己。更改框架后,您应该调用

self.lblchoice1.setNeedsDisplay()

虽然您可能需要将标签的内容模式更改为 UIViewContentModeRedraw 以确保它重绘。

虽然最好使用 UIView 块动画方法来做到这一点。

【讨论】:

    【解决方案2】:

    我不认为你可以直接编辑 UILabel 的框架。您应该改为更改整个框架。

    var lblChoice1Frame = self.lblChoice1.frame
    lblChoice1Frame.size.width += 150
    
    UIView.animateWithDuration(0.3) { () -> Void in
        self.lblChoice1.frame =  lblChoice1Frame
    }
    

    【讨论】:

    • 这不会改变我标签的初始大小。它只是创建一个渐进式显示动画我的标签...
    猜你喜欢
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多