有没有我可以为 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 的子类中,只需覆盖 contentOffsetwillSet 即可。好像是在layoutSubviews()之前调用的。

【讨论】:

【参考方案3】:

您可以使用委托方法scrollViewDidScrollscrollViewWillBeginDecelerating 并拦截contentOffset.y。希望对您有所帮助。

【讨论】:

didScroll 将是您最好的选择,它将在视图滚动时不断调用,因此移动您的框架(没有或 非常 短动画) 应该是平滑的。 这就是我所做的,但它很不稳定,因此我希望尽可能拦截 willSet 调用

以上是关于有没有我可以为 UIScrollview.contentOffset 截取的“willSet”和“didSet”?的主要内容,如果未能解决你的问题,请参考以下文章

我可以为没有 UDID 的任何设备分发我的应用程序吗?

有没有办法可以使用 SwiftUI 将文本限制为 2 / 3 行?

有没有一种简单的方法可以为 Kivy 按钮添加边框

我可以将活动转换为浮动窗口吗?

有没有一种简单的方法可以将 MySQL 数据转换为 Title Case?

有没有一种简单的方法可以将数据库 SQL 脚本文件分解为每个对象一个文件?