有没有我可以为 UIScrollview.contentOffset 截取的“willSet”和“didSet”?
Posted
技术标签:
【中文标题】有没有我可以为 UIScrollview.contentOffset 截取的“willSet”和“didSet”?【英文标题】:Is there a 'willSet' & 'didSet' I can intercept for UIScrollview.contentOffset? 【发布时间】:2015-02-12 20:36:34 【问题描述】:当contentOffset.y
为负值时,我需要优雅地移动框架。
问题是我不想让contentOffset
调用AFTER内容已降至 0 以下。
是否有一个willSet
调用可以在UIScrollView
偏移其内容之前拦截它?
【问题讨论】:
在 Objective-C 中,您可以注册滚动视图边界更改的通知。不过,我对在 Swift 中使用它知之甚少。 你的意思是作为代表电话? 不,我的意思是NSNotificationCenter
。
任何一个答案我都可以在它们之间移动,除非有特定的事情,只有一个人可以做,另一个人不能做
如果它是一个“框架”,可能会在滚动视图上而不是在其中显示它?
【参考方案1】:
您可以在 swift 中轻松添加 willSet。只是子类 UIScrollView 并且只覆盖它,就像这样。显然,除了 println 之外,您还想做一些事情,但我证实这肯定会在 didScroll 委托之前触发。我不知道它会解决您的动画问题,但这是您要求的。
import UIKit
class MyScrollView: UIScrollView
override var contentOffset: CGPoint willSet println("old value \(newValue)")
【讨论】:
【参考方案2】:看来,这行得通:
class MyScrollView: UIScrollView
override var contentOffset:CGPoint
willSet
println("newOffset: \(newValue)")
在 UIScrollView
的子类中,只需覆盖 contentOffset
的 willSet
即可。好像是在layoutSubviews()
之前调用的。
【讨论】:
【参考方案3】:您可以使用委托方法scrollViewDidScroll
或scrollViewWillBeginDecelerating
并拦截contentOffset.y
。希望对您有所帮助。
【讨论】:
didScroll
将是您最好的选择,它将在视图滚动时不断调用,因此移动您的框架(没有或 非常 短动画) 应该是平滑的。
这就是我所做的,但它很不稳定,因此我希望尽可能拦截 willSet 调用以上是关于有没有我可以为 UIScrollview.contentOffset 截取的“willSet”和“didSet”?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法可以使用 SwiftUI 将文本限制为 2 / 3 行?