如何实现自定义 UIDynamicBehavior 操作

2024-02-21

我一直在寻找一个示例,展示如何在 UIKit 动态中实现自定义 UIDynamicBehavior。所有教程和示例仅展示如何使用基元(碰撞、重力、附件、推动、捕捉等)组装 UIDynamicBehavior

在我的应用程序中,一些视图在屏幕上浮动(使用动态),我想让它们在与其他固定视图重叠时消失。为此,我想测试 UIDynamicAnimator 和 UICollisionBehavior 委托方法中的重叠,但不幸的是,这些方法没有提供足够的粒度来执行我需要的测试。

编辑:显然我不得不等待一天才能回答我自己的问题(新用户),所以我的解决方案现在作为答案发布在下面。


我选择的方法是开发自己的 UIDynamicBehavior 类并将其添加到动画制作器中,现在它使浮动视图在与固定视图重叠时消失。

下面的示例代码展示了如何编写您自己的 UIDynamicBehavior 类以将您自己的行为插入 UIDynamicAnimator 中。我将类称为 UISinkBehavior,因为当视图移动到“下沉孔”上时,它会“下沉”视图。

// UISinkBehavior.h
#import <UIKit/UIKit.h>

@protocol UISinkBehaviorDelegate <NSObject>
- (void)sunk:(id)item;
@end

@interface UISinkBehavior : UIDynamicBehavior
@property (weak, nonatomic) id<UISinkBehaviorDelegate> delegate;
- (id)initWithItems:(NSMutableArray*)items withSinkhole:(UIView*)sinkhole;
@end

// UISinkBehavior.m
#import "UISinkBehavior.h"

@interface UISinkBehavior ()
@property (nonatomic) NSMutableArray *items;
@property (nonatomic) id<UIDynamicItem> sinkhole;
@end

@implementation UISinkBehavior

- (id)initWithItems:(NSMutableArray*)items withSinkhole:(UIView*)sinkhole
{
    if (self = [super init])
    {
        _items = items;
        _sinkhole = sinkhole;
        // weak self ref to avoids compiler warning about retain cycles
        __weak typeof(self) ref = self;
        // this is called by the UIDynamicAnimator on every tick
        self.action = ^{
            UIView *item;
            // check each item if it overlaps sinkhole
            for (item in ref.items)
                if (CGRectIntersectsRect(item.frame, sinkhole.frame))
                {
                    // sink it (handled by delegate
                    [ref.delegate sunk:item];
                    // remove item from animation
                    [ref.items removeObject:item];
                    // remove behaviour from animator when last item sunk
                    if (ref.items.count < 1)
                        [ref.dynamicAnimator removeBehavior:ref];
                }
        };
    }    
    return self;
}
@end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何实现自定义 UIDynamicBehavior 操作 的相关文章

  • 主队列上的dispatch_sync 与dispatch_async

    请耐心等待 这需要一些解释 我有一个类似于下面的函数 上下文 aProject 是一个名为 LPProject 的核心数据实体 其数组名为 memberFiles 其中包含另一个名为 LPFile 的核心数据实体的实例 每个 LPFile
  • 更改 UINavigationBar 中 UIBarButtonItem 的位置

    如何更改 UIBarButtonItem 在 UINavigationBar 中的位置 我希望我的按钮比正常位置高约 5 像素 此代码为 UINavigationBar 创建一个具有图像背景和自定义位置的后退按钮 诀窍是创建一个中间视图并修
  • iOS:在代码中访问 app-info.plist 变量

    我正在开发通用应用程序 并且希望访问代码中 app info plist 文件中存储的值 原因 我使用以下方法从故事板动态实例化 UIViewController UIStoryboard storyboard UIStoryboard s
  • stringFromDate 始终为 NIL

    我知道这是一个重复的问题 但是在 stackoverflow 和 google 上搜索了许多类似的问题后 没有一个解决方案对我有用 我正在尝试将从数据库收到的日期转换为字符串格式以在 iPhone 应用程序中显示 我正在按以下方式将日期转换
  • CF 类型的带有 __attribute__((NSObject)) 的强 @property 不会保留

    更新 自 Xcode 4 6 起 此问题已得到修复 现在 这项技术再次按预期发挥作用 但是 在代码中使用之前 请务必阅读 Rob Napier 出色答案顶部的注释 原帖 ARC Xcode 4 3 1 iOS 5 1 我有一个 CF 类型
  • 如何逐步绘制矢量路径? (拉斐尔.js)

    如何逐步动画化矢量路径 就像它被绘制一样 换句话说 慢慢地逐像素地显示路径 我在用着Rapha l js but如果您的答案不是特定于库的 例如可能有一些通用的编程模式可以完成此类事情 我对矢量动画相当陌生 欢迎 使用直线路径很容易做到 就
  • 在 xcode 4 中找不到 info.plist

    所以常规介绍 我是 Objective C 的新手 到处搜索但找不到 所以请帮忙 我想做的就是将我的应用程序设置为在后台获取位置更新 就是这样 我知道我应该在项目的 info plist 文件中将位置添加到 UIBackgroundMode
  • 我如何在 ANSI C 中实现类似于 Objective-C @encode() 编译器指令的东西?

    encode 指令返回一个 const char 它是传入的数据类型的各个元素的编码类型描述符 示例如下 struct test int ti char tc printf s encode struct test returns test
  • 为什么不使用 Interface Builder [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 ios wifi 网络上查找对等点

    我试图弄清楚如何搜索登录到 wifi 网络且在特定端口上托管应用程序的其他设备 在不知道这些其他设备的地址甚至不知道它们托管的端口的情况下 如何检测它们的存在 一旦发现 我应该能够联系该设备并与其建立连接 最标准的 iOS方式 是使用Bon
  • 目标操作 uicontrol 事件

    我一定在这里遗漏了一些明显的东西 但是 UIControl有一个方法 void addTarget id target action SEL action forControlEvents UIControlEvents controlEv
  • iOS 上读取证书问题

    我正在尝试从 iOS 中的各种 URL 读取证书 然而 我的代码运行不佳 应该返回我需要的信息的数组总是返回null 我缺少什么 void findCertificate NSString url NSInputStream input N
  • 如何将媒体附件添加到 iOS 10 应用程序中的推送通知中?

    有多个示例 您应该如何设置项目来添加使用 媒体附件 技术来显示图像的丰富通知 我已经阅读了其中的大部分内容 但我错过了一些内容 因为我的项目没有使用此有效负载显示任何丰富的通知 使用 APNS Tool 和 Boodle 进行测试 aps
  • iOS 中的视频可以进行反卷积吗?

    我想拍摄击球手挥动棒球的镜头 但球棒很模糊 视频为 30 fps 通过研究 我发现反卷积似乎是最小化运动模糊的方法 但我不知道是否或如何在我的 iOS 应用程序后处理中实现它 我希望有人能给我指出正确的方向 比如如何在 iOS 中应用反卷积
  • jQuery - 动画CSS背景大小?

    我正在尝试对背景图像的大小进行动画处理 但它不起作用 从以下代码中知道为什么吗 this animate opacity 1 background size 70px 48px right 39 top 45 250 注意 所有其他属性都可
  • 对 Objective-c 对象数组进行排序

    所以我有一个自定义课程Foo有许多成员 interface Foo NSObject NSString title BOOL taken NSDate dateCreated 在另一堂课上我有一个NSMutableArray包含这些对象的列
  • NSPredicate 格式字符串不起作用

    在我的代码中 我想检查记录是否已存在 以便我知道是创建它还是更新它 但我遇到了一个问题 问题是当我使用这个时 NSPredicate pred NSPredicate predicateWithFormat ATTRIBUTE ID idN
  • 在 D3 中在外部加载的 svg 图形上绘图

    我已经从 svg 文件加载了外部图形 我想尝试在其上绘图 但不知道如何操作 我的简单 d3 代码在这里
  • 自调整大小的集合视图在 iOS 15 中进入递归循环

    我有一个自动调整大小的集合视图 当我调用 super layoutSubviews 时 我的应用程序崩溃 因为集合视图进入递归更新循环 这在 iOS 14 及更低版本中运行良好 但从 iOS 15 开始就观察到了这一点 class Dyna
  • Angular 2交错列表动画

    我正在尝试使用动态列表在我的应用程序中交错播放动画 如果可能的话 我希望动画进入和离开 但我会解决只是为了让进入工作 animations trigger slideIn transition enter style transform t

随机推荐

  • module.export和export有什么区别

    有什么区别module export and export 如果 module export 对象中有一些属性怎么办 将要export xx那么无效吗 首先它是exports and module exports并不是export and
  • 在Python中自动下载所需模块的最简单方法?

    我想发布一个我编写的 python 模块 它依赖于几个包 最简单的方法是什么 以便以编程方式下载这些软件包 以防它们在正在运行的系统上不可用 大多数这些模块应该可以通过 easy install 或 pip 或类似的东西获得 我只是想避免用
  • 对相似的时间序列进行聚类?

    我有 10 20k 个不同的时间序列 24 维数据 一天中每个小时的一列 并且我对表现出大致相同活动模式的时间序列进行聚类感兴趣 我最初开始实施动态时间扭曲 DTW 是因为 并非我所有的时间序列都完全一致 出于我的目的 两个稍微偏移的时间序
  • 通过IP地址查找位置Nodejs mongodb [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试查找 IP 地址的位置 IP 地址将通过前端 Android iOS 应用程序发送到 API
  • pkgdown 小插图代码块间距

    我在运行时遇到代码块输出问题pkgdown build site 与所有默认选项 块被渲染在html内容 https mountainmath github io cancensus articles Making maps with ca
  • 使用 IIS 10 设置 Laravel 5.4

    我想在 Windows Server 2016 上运行的 IIS 10 上部署 Laravel 项目 最简单且仍然安全的方法是什么 我就是这样做的 我不确定这是正确的方法 安装 URL 重写模块 https www iis net down
  • 设置 /p 空答案崩溃

    我是新来的 所以我会尽力做到最好 所以我正在尝试制作一个基于文本的 MS DOS 的 RPG 而且我进展得很好 因为我刚刚看到如果用户在 set p 处输入了无效的输入 比如一个空答案 只需按 Enter 或一个不在 IF 上的答案 批处理
  • JDI、Java 字节代码检测和 Java 代理(JWDP、JVMTI)

    我是调试器 仪器和 JVMTI 领域的新手 所以我对他们没什么疑问 JDI java调试器接口 JWDP javaagent和本机代理 JVMTI 有什么区别 Java Instrumentation API 在图中的位置 我正在使用 JD
  • 这三个for循环的复杂度是多少?

    Having 输入数组A 1 n N的长度A 算法 for int i N i gt 0 i Loop 1 for int j 1 j
  • 如何从 Google 云端硬盘下载文件

    我目前正在尝试制作一个从 Google Drive 下载文件的应用程序 在 Google Drive SDK 文档中 我找到了一个应该返回 System IO Stream 对象的示例方法 https developers google c
  • 文件名的 LEX 槽类型。 AMAZON.LITERAL 替代品

    我必须用示例话语创建意图 打开文件 文件名 显示 文件名 基本上 我必须有一个接受文件名的插槽 用户可以输入 打开我的文件报告 pdf 打开文件活动1 doc 打开文件去年报告 如果我可以使用 AMAZON LITERAL 类型 它会完美地
  • 从相同类型的另一个对象更新实体框架对象

    是否有任何方法可以从强类型对象更新对象而不列出每个字段 让我们考虑以下情况 using var context new MyDBEntities var user User Session EditedUser var oldUser co
  • Chrome 102:已被 CORS 策略阻止:请求的目标 IP 地址空间为“未知”,但资源位于“私有”地址空间中

    我们有一个托管在 LAN 中的基于 Web 的系统 非 SSL 从 Chrome 102 Windows Ubuntu 开始 我们面临一个随机的 CORS 问题 描述为 已被 CORS 策略阻止 请求具有目标 IP 地址空间 为 未知 但资
  • JS addeventListener 点击消失

    我创建了简单的fidlle https jsfiddle net 0nm4uLvd var cnt 1 function add var root document getElementById root root innerHTML br
  • 无法运行从 spring-boot jersey 生成的 jar

    我无法使用带有 jersey 项目的 spring boot 运行生成的 jar 文件 我遇到的例外是 Error starting Tomcat context Exception org springframework beans fa
  • 如果验证后我决定将元素移回原处,如何将 jquery-uidraggable 恢复为 true?

    我正在寻找一种方法 如果某些内容未验证 则从恢复状态触发事件 例如 如果元素不存在 它将从另一个列表中创建它 但如果它已经存在 则应该转到 else 并将元素返回到其原来的位置 catalog ul droppable tolerance
  • 如何在 Java 中使用 Scala 单例对象?

    我有一个需要在 Java 类中使用的 Scala 对象 这是 Scala 对象 object Person val MALE m val FEMALE f 如何在 Java 中使用这个 Scala 对象 到目前为止 我已尝试以下操作但没有成
  • 使用私有 git 存储库来阅读文档

    我安装了 read the docs 以从需要用户 密码身份验证的私有 git 存储库上的项目开始生成文档 手动导入项目时 如何输入用户名和密码以允许阅读文档克隆存储库 非常感谢 最大限度 我最近遇到了同样的问题 这里还有一个这样的问题为什
  • DataGrid 选项卡导航跳过列

    我在 WPF 中有一个带有模板列的数据网格 网格中的几列是只读的 其他焦点变为可编辑 而不是出现标签 文本框 复选框等 我想要实现的是 当我在网格的列中进行切换时 只读列将被跳过 有人知道如何实现这一目标吗 谢谢 弗拉丹 不 不工作 这是完
  • 如何实现自定义 UIDynamicBehavior 操作

    我一直在寻找一个示例 展示如何在 UIKit 动态中实现自定义 UIDynamicBehavior 所有教程和示例仅展示如何使用基元 碰撞 重力 附件 推动 捕捉等 组装 UIDynamicBehavior 在我的应用程序中 一些视图在屏幕