为什么在动画块中设置图层锚点时我的视图会跳跃?

2024-01-02

我有一个 UIPanGestureRecognizer 附加到我的 iOS 应用程序中的视图。我从以下位置复制了代码触摸示例应用程序 https://developer.apple.com/library/ios/samplecode/Touches/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007435对于平底锅处理程序。当手势开始时,我的代码:

  • 记录原始锚点和中心。
  • 将锚点和中心更改为用户手指周围,如下所示:

    CGPoint locationInView = [gestureRecognizer locationInView:target];
    CGPoint locationInSuperview = [gestureRecognizer locationInView:target.superview];
    target.layer.anchorPoint = CGPointMake(
        locationInView.x / target.bounds.size.width,
        locationInView.y / target.bounds.size.height
    );
    target.center = locationInSuperview;
    

随着手势的进行,平移处理程序会不断改变中心以跟踪手指的移动。到目前为止,一切都很好。

当用户放开时,我希望视图以动画方式返回到其原始起点。执行此操作的代码如下所示:

[UIView animateWithDuration:2 delay:0 options:UIViewAnimationCurveEaseOut animations:^{
    target.center            = originalCenter;
    target.layer.anchorPoint = originalAnchorPoint;
}];

这确实使视图回到原来的起点。但是,在动画开始之前,视图会跳转到 UI 中的不同位置。 IOW,放开它,它会跳起来,然后它会动画回到它所属的地方。

我想也许我需要在动画之外设置锚点和中心,也许将中心设置为超级视图中的位置,就像手势开始时一样,但这似乎没有什么区别。

我在这里缺少什么?如何防止用户放开时跳转?


我怀疑有两个问题没有尝试你正在做的事情:

更改锚点会更改视图/图层的位置。为了在不修改位置的情况下更改锚点,您可以使用像这样的一些助手:

-(void)setAnchorPoint:(CGPoint)anchorPoint forView:(UIView *)view
{
    CGPoint newPoint = CGPointMake(view.bounds.size.width * anchorPoint.x, view.bounds.size.height * anchorPoint.y);
    CGPoint oldPoint = CGPointMake(view.bounds.size.width * view.layer.anchorPoint.x, view.bounds.size.height * view.layer.anchorPoint.y);

    newPoint = CGPointApplyAffineTransform(newPoint, view.transform);
    oldPoint = CGPointApplyAffineTransform(oldPoint, view.transform);

    CGPoint position = view.layer.position;

    position.x -= oldPoint.x;
    position.x += newPoint.x;

    position.y -= oldPoint.y;
    position.y += newPoint.y;

    view.layer.position = position;
    view.layer.anchorPoint = anchorPoint;
}

(我自己在我的项目中使用它。在这里找到:更改 CALayer 的锚点会移动视图 https://stackoverflow.com/questions/1968017/changing-my-calayers-anchorpoint-moves-the-view)

您的动画将锚点设置回其原始值。您应该使用上面的助手来重置锚点。这可以确保更改锚点时视图不会移动。你必须这样做动画之外。然后,使用动画块更改视图的中心并将其动画到您想要的位置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在动画块中设置图层锚点时我的视图会跳跃? 的相关文章

  • Java 动画中的跳跃和撕裂

    以下代码绘制一个正方形 其中两个较小的正方形在其中旋转 每当你点击键盘上的箭头时 整个系统就会朝那个方向移动 然而 我遇到了一些图像撕裂和有时跳过的问题 它很小但仍然存在 我想知道是否有人知道如何在不大规模更改代码的情况下解决这些问题 im
  • Swift:检查 UISearchBar.text 是否包含 url

    如何检查 UISearchBar text 是否包含 URL 我想做这样的事情 if searchBar text NSTextCheckingType Link 但我收到错误 String is not convertible to NS
  • 如何向 UIView 添加大小调整手柄?

    我试图根据用户请求在运行时动态创建视图 UIImageView 和 UITextView 然后允许用户移动它们并调整它们的大小 除了调整大小之外 我的一切都工作得很好 我尝试使用捏合手势识别器 但发现它对于我想要的东西来说太笨拙了 因此 我
  • 如何从 AFNetworking 和 AFJSONRequestOperation 获取可变字典?

    我将 JSONKit 与 AFNetworking 的 AFHTTPClient 带有 AFJSONRequestOperation 一起使用 我似乎无法弄清楚如何触发使用 JSONKit 的 mutableObjectFrom 方法 而不
  • jQuery:在动画期间禁用单击

    所以我正在做一个小测验 我想禁用里面所有内容的点击 qWrap当动画运行时 从而防止垃圾点击 我尝试使用 is animated 但没有效果 有任何想法吗 HTML div ul li class qContainer ul class q
  • 在 iOS 上,UIView 的 Frame 属性未在动画内部分配

    在我的 iOS 应用程序中 我尝试执行以下简单的动画 void dismissToolbar NSLog bx f by f bw f bh f toolbar frame origin x toolbar frame origin y t
  • “同时创建 xib 文件”按钮已禁用

    我在创建时遇到这个问题UIView s子类 创建 例如 UIViewControllers or UITableViewCells没关系 为什么会出现这种情况 I create view using cmd N and Xcode Vers
  • 这个错误是无效上下文0x0吗?

    我在ViewDidLoad中编写了以下代码 Implement viewDidLoad to do additional setup after loading the view typically from a nib void view
  • 沿着预定路径移动图像?

    是否可以通过按下 iphone SDK 中的按钮来将图像设置为沿着预定路径运动 我不是在寻找任何奇特的东西 我正在研究一个简单的概念 但这会节省大量动画工作 是的 您可以通过创建一个路径来为任何 CALayer 制作动画CAKeyframe
  • 重置转换后的 UIView 的原点会变得疯狂

    我使用 UIView transform 旋转 缩放 UIVIew 效果很好 然而 一旦我更改视图的框架原点 即使我没有执行任何进一步的 CGAffineTransforms 视图的内容也会开始 奇怪 地缩放 为什么会出现这种情况 我该如何
  • 如何连续关闭 2 个模态视图控制器?

    我有 2 个以模态方式呈现的视图控制器 A presents B which presents C 当我解雇C时 我也想解雇B 但我不知道该怎么做 解雇C self dismissModalViewControllerAnimated YE
  • SwiftUI:为表单中的单元格添加动画

    我正在尝试动画化我的Form或者更确切地说是其中的细胞 我的问题是 下面的代码给了我一个很好的插入动画 但是对于删除 单元格在看起来很丑陋的延迟后突然被删除 import SwiftUI struct ContentView View St
  • UIView 周围的虚线边框

    如何在周围添加虚线边框UIView 像这样的东西 如果您喜欢子层 还有另一种方法 在您的自定义视图的 init 中 输入以下内容 border 是 ivar border CAShapeLayer layer border strokeCo
  • 在 Swift 中,如何为具有自动布局的 UIView 制作动画,就像页面滑入一样?

    我尝试创建一个 UIView 来表示一个大小与设备屏幕相同的页面 由于该应用程序支持方向 因此我使用 AutoLayout 来构建它 它工作正常 直到我尝试将页面动画化以从右侧滑入 经过一番研究后 我能想到的最好的办法是 myView UI
  • 如何制作带边框的半圆角(顶角圆角)文本视图?

    How to make a half rounded Top corner rounded textview or tableview with the borderwidth and borderColor 这并不完美 但你可以这样做 i
  • 获取 NSLayoutConstraints 关联视图

    我试图循环遍历视图约束 我向 view1 添加了 顶部 尾部 前导和高度约束 top trailing 和leading 是主ViewControllers 视图 如果我循环查看 view1 的约束 我只会看到高度约束 for constr
  • 如何重置(即取消缩放)UIScrollView?

    我有一个 UIScrollView 其中包含图像和分段控件 该控件允许用户在 ScrollView 内切换图像 如果我只是将图像交换到 UIImageView 内部 它将以放大状态显示新图像 如何将 UIScrollView 重置回未放大状
  • CSS 过渡或动画从顶部向上滑动:100% 到底部:0

    内部 div 的高度可变 具体取决于内部文本的长度 该高度始终比外部 div 短 我希望当外部 div 悬停时 内部覆盖 div 从 top 100 向上滑动到bottom 0 我下面的 CSS 代码没有产生我想要的向上滑动效果 它只是在外
  • 如何获得包含大量图像(50-200)的快速 UICollectionView?

    我在用着UICollectionView在一个显示大量照片 50 200 的应用程序中 我在让它变得活泼 例如像照片应用程序一样活泼 时遇到问题 我有一个习惯UICollectionViewCell with a UIImageView因为
  • iPhone 旋转时 CALayer 自动旋转

    我有一个 UIViewController 其中我将 CALayer 子类添加到视图层 self view layer addSublayer myObject backgroundLayer 当我旋转设备时 视图会旋转 但 CALayer

随机推荐

  • 在 Java 中创建动态二维矩阵

    我想要一个动态矩阵 行数和列数未知 通过单击按钮填充它 但还有更多 我不想添加整行 而只是一次添加一个单元格 单击一下 添加一个单元格 当然不是随机的 第一行的第一个单元格 第一行的第二个单元格 然后第二行的相同单元格 依此类推 我了解 U
  • 为每个项目执行 npm install 会占用太多驱动器空间

    有没有什么方法可以将 npm install 路由到硬盘驱动器的特定部分 当我执行 npm install 时 它会在驱动器的该部分中创建 node module 文件夹 当我运行任何项目时 它会在驱动器的该部分中查找依赖项 就像单身一样p
  • UIWebView 获取 HTML 源

    我正在尝试获取 UIWebView 的 HTML 源代码 而无需再次重新下载 也称为进行另一次下载 例如 NSData dataWithContentsOfURL NSURL URL 或启动 NSURLRequest 浏览 UIWebVie
  • 在生产环境中部署 Sql Server Reporting Services 报告

    如何在生产盒上部署 Sql 服务器报告 在本地这不是问题 我只需指定 url 然后右键单击项目并说部署 将其部署在我的本地服务器上 但生产服务器却并非如此 我建议您创建可以在生产服务器上执行的 rs 脚本 查看 Reporting Serv
  • 如何在 WordPress 页面中创建不同的可编辑部分?

    我一直在 WordPress 上构建我的第一个主题 但在将内容添加到不同部分时遇到了问题 我的 HTML 有点像这样 div lt Text gt div div lt Text and Images gt div div lt Text
  • 哪些 GTK+ 元素支持哪些 CSS 属性?

    在将我自己的 CSS 应用到 GTK 应用程序时 我注意到某些元素忽略某些 CSS 属性 而其他元素则忽略其他元素或不忽略它们 这导致我搜索哪些元素支持哪些 CSS 属性的概述 到目前为止我找不到任何这样的概述 例如Gtk Label不支持
  • 用于公开通用接口的非通用版本的模式

    假设我有以下用于公开分页列表的界面 public interface IPagedList
  • 如何在单击时向按钮添加类

    很抱歉提出了愚蠢的问题 但我无法在单击时向按钮添加类 我有按钮列表 单击后我需要更改活动按钮的背景 我不知道如何在单击列表内部并添加类时获取元素的索引 我需要用纯 JavaScript 来实现 只需要离开 document ready fu
  • 在 onStart() 方法中停止 Windows 服务

    我想停止 Windows 服务onStart 客户没有许可证时的方法 我用service Stop 但它不起作用 protected override void OnStart string args try bridgeServiceEv
  • Seaborn 热图中按行的颜色比例

    我想在 Seaborn 中制作热图 其中颜色按行缩放 我的意思是 一行中的最高值在图例上具有最高的颜色 而一行中的最低值具有最低的颜色 我怎样才能做到呢 这是我的代码 sales sales pivot table index Source
  • 在 Swift 中调用 NSException.raise()

    我试图通过调用 NSException raise 在 Swift 中引发异常 定义是 class func raise name String format format String arguments argList CVaListP
  • “Mapbox 地图”的自动缩放

    在情节网站上Python 中的地图配置和样式 https plotly com python map configuration automatic zooming or bounds fitting描述了如何自动缩放 地理地图 impor
  • Leiningen:如何自定义 .m2 文件夹的位置?

    我想更改 leiningen 存储所有依赖项的 m2 文件夹的位置 在 Linux 上 有可能实现这一目标吗 我已经检查了 lein sh 脚本的源代码和所有环境变量 但似乎没有任何内容指向 HOME m2 对于莱宁根 v2 将 profi
  • 如何创建一个实现 java.util.collections 的类

    我正在尝试创建一个类说MyStack这将实现一个 java util collections 类 MyStack将覆盖集合类的一些方法 例如添加 类似于推送 删除 类似于弹出 等 我打算在与Set或集合类的其他接口 除了MyStack不会是
  • 如何提高客户端-服务器架构应用程序的性能?

    我们有一个基于客户端 服务器架构的产品 有关所使用的技术堆栈的一些详细信息 客户端 Java Swing 服务器 RMI Java 数据库 Oracle 客户端位于世界不同地方 但java服务器和oracle数据库位于瑞典的同一台机器上 因
  • Laravel 项目 UML 类图

    我一直在谷歌上搜索 MVC PHP 框架的 UML 示例以及与 PHP 项目相关的项目 UML 图 但不幸的是总是出现 java 和 c 示例 我对 UML 图有一点了解 但没有真正的例子来了解它是如何使用的 我有一个正在开发的 Larav
  • 如何限制在 Django 管理站点中查看的查询集/记录?

    默认情况下 Django 管理站点显示相关模型 表的所有记录以供查看 如何只显示符合特定条件的记录 在您的管理定义中 您可以定义queryset 返回该模型管理员的查询集的方法 例如 class MyModelAdmin admin Mod
  • 何时使用 Rabin-Karp 或 KMP 算法?

    我使用以下字母生成了一个字符串 A C G T 我的字符串包含超过 10000 个字符 我正在其中搜索以下模式 ATGGA TGGAC CCGT 我要求使用字符串匹配算法O m n 运行时间 m pattern length n text
  • 输出迭代器适配器用于计数但不复制

    有多种 STL 算法依赖输出迭代器来存储算法结果 例如 std set intersection将在输出迭代器中存储两个排序范围之间的所有公共元素 然后按输出的每个元素进行后递增 有时 我对实际元素不感兴趣 而只对输出元素的数量感兴趣 在这
  • 为什么在动画块中设置图层锚点时我的视图会跳跃?

    我有一个 UIPanGestureRecognizer 附加到我的 iOS 应用程序中的视图 我从以下位置复制了代码触摸示例应用程序 https developer apple com library ios samplecode Touc