动画约束变化,位置动画,但高度跳跃没有动画

2024-01-11

我有一个自定义的 UIView。在该 UIView 中,我有一个带有黄色背景的 UILabel,其中包含@“8”,称为labelWhite。我以编程方式为该 UILabel 创建 4 个约束:顶部、左侧、宽度和高度。

当我点击 UIView 时,我会更改高度的常量值并在 5 秒内对布局进行动画处理。然而,视图的高度立即跳转到新值,但 y 位置也发生变化并立即跳转到新值。然后在 5 秒的动画中,y 位置动画回到它应该一直保持的位置。

您可以在此处观看其发生的视频:http://inadaydevelopment.com/stackoverflow/Constraints0.mov http://inadaydevelopment.com/stackoverflow/Constraints0.mov

它应该做的就是保持 y=0 并垂直收缩。我究竟做错了什么?


EDIT:

我刚刚发现,如果我的子视图是 UIView,我的动画会完全按照预期工作,但作为 UILabels,我会得到跳跃大小 + 动画位置。

到底是怎么回事?有没有办法让 UILabels 为其大小设置动画?


这是我用来修改布局和设置动画的代码:

self.constraintWhiteHeight.constant = secondaryHeight;

[UIView animateWithDuration:5.0 animations:^{
    [self layoutIfNeeded];
}];

这是我用来创建约束的代码:

// ------ Top -----
NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:self
                                                              attribute:NSLayoutAttributeTop
                                                              relatedBy:NSLayoutRelationEqual
                                                                 toItem:self.labelWhite
                                                              attribute:NSLayoutAttributeTop
                                                             multiplier:1.0
                                                               constant:0];
[self addConstraint:constraint];

// ------ Left -----
self.constraintWhiteLeft = [NSLayoutConstraint constraintWithItem:self
                                                        attribute:NSLayoutAttributeLeft
                                                        relatedBy:NSLayoutRelationEqual
                                                           toItem:self.labelWhite
                                                        attribute:NSLayoutAttributeLeft
                                                       multiplier:1.0
                                                         constant:0];

// ------ Width -----
NSString *constraintString = [NSString stringWithFormat:@"H:[_labelWhite(==%.0f)]", self.bounds.size.width];
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:constraintString
                                                               options:0
                                                               metrics:nil
                                                                 views:NSDictionaryOfVariableBindings(_labelWhite)];
NSLog(@"constraints: %@", constraints);
self.constraintWhiteWidth = [constraints objectAtIndex:0];
[self.labelWhite addConstraints:constraints];

// ------ Height -----
constraintString = [NSString stringWithFormat:@"V:[_labelWhite(==%.0f)]", primaryHeight];
constraints = [NSLayoutConstraint constraintsWithVisualFormat:constraintString
                                                      options:0
                                                      metrics:nil
                                                        views:NSDictionaryOfVariableBindings(_labelWhite)];
self.constraintWhiteHeight = [constraints objectAtIndex:0];
[self.labelWhite addConstraints:constraints];

我不认为你做错了什么,这似乎是当你尝试设置标签高度动画时标签的行为方式。我知道我过去一直在努力解决这个问题,但我不记得是否曾经找到过通过在动画块中对约束进行动画处理的解决方案。我让它工作的方法是使用计时器或 CADisplayLink 来调整高度约束。

-(void)shrinkLabel {
    self.constraintWhiteHeight.constant -= 1;
    if (self.constraintWhiteHeight.constant >= secondaryHeight)
    [self performSelector:@selector(shrinkLabel) withObject:nil afterDelay:.05];
}

编辑后:

尽管计时器方​​法有效,但它看起来并不总是顺利,具体取决于您使用的速度和增量。另一种方法是使用一个大的 UIView(与电影中的黄色标签大小相同),其中包含一个较小的 UILabel,该 UILabel 对较大视图具有 centerX 和 centerY 约束。然后,像往常一样使用 animateWithDuration:animations 为黄色视图设置动画:

-(void)shrinkLabel {
    self.yellowViewHeightCon.constant = secondaryHeight;
    [UIView animateWithDuration:5 animations:^{
        [self layoutIfNeeded];
    }];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动画约束变化,位置动画,但高度跳跃没有动画 的相关文章

  • PhoneGap 1.4 封装 Sencha Touch 2.X - 性能怎么样?

    我正在构建一个多平台平板电脑应用程序 仅使用其 Webview 使用 Phonegap 1 4 对其进行包装 然后使用 Sencha Touch 2 框架发挥我的魔力 我所说的多平台是指 iOS 5 X 和 Android 3 0 目前 到
  • 我如何从 iPhone 设备获取电子邮件历史记录..?

    friends 我想从我的 iPhone 访问电子邮件历史记录 并且还希望在收到新邮件时收到通知 如果可能的话 请向我提供源代码片段 Thanks 简而言之 使用任何已记录的 API 都是不可能的
  • 在 JSQMessagesViewController 中显示 LocationMediaItem

    我刚刚尝试实施LocationMediaItem in my Xamarin iOS应用程序使用JSQMessagesViewController 一切都很顺利 唯一的问题是UICollectionView应该显示位置的单元格永远停留在加载
  • 如何从 Firebase 同步检索数据?

    我有两个集合 即用户和问题 根据使用 userId 登录的用户 我检索currQuestion价值来自users收藏 基于currQuestion值 我需要检索question来自 Firebase 的文档Questions收藏 我使用下面
  • 快速钥匙串更新只有在第二次尝试时才起作用

    您好 我在更新存储在钥匙串中的登录信息方面遇到了 iOS 钥匙串的一个非常奇怪的问题 因此 如果没有保存的凭据 则正确运行保存函数会保存登录信息 如果登录信息已存在并且用户更新了密码 则更新功能仅正确更新密码 但是 如果登录信息存在并且我尝
  • 使用 nib 作为带有 nib 类的表节标题

    我想创建一个加载 nib 文件并将其设置为标题 UIView 的节标题 这个 nib 文件还将有一个关联的类 其中插座和操作连接到 因此我想像平常一样使用 nib 加载该类 我在网上搜索并找到了几个类似的答案 但我找不到任何适合我的答案 经
  • iOS 13 检查 CLLocationManager 的临时授权状态

    根据 WWDC 视频 https developer apple com videos play wwdc2019 705 https developer apple com videos play wwdc2019 705 当你要求 Al
  • 如何在应用程序项目中使用 Cocoa Touch 框架

    我熟悉构建单个 iOS 应用程序 但我坚持使用 Cocoa Touch 框架向多个应用程序共享通用代码 问题 框架的头文件不可见 无法链接到消费应用程序项目 我做了什么 1 我创建了一个名为 libTestFramework 的项目 Coc
  • iPhone SQLite页面缓存不断增长

    I use sqlite数据库用于存储 还有许多数据库事务 我的问题是 sqlite 页面缓存的内存使用量快速增长 在instruments我可以找到这条线 Graph Category Live Bytes Living Transien
  • 在 Xcode 6 中定位 iOS 7.1 或 7.0 时,应用程序中出现黑条

    重现步骤 使用Xcode6创建一个新项目 单视图模板 仅限iPhone Objective C 导航到项目设置并将部署目标从 8 0 更改为 7 1 在安装了 7 1 的 iPhone5 S 或 iPhone5 s 7 1 模拟器中运行应用
  • 在 ios 版 Ionic 中接收 URL

    我正在使用离子框架 我正在尝试设置一种从另一个应用程序接收网址的方法 就像 您在浏览器中 单击共享 然后将链接发送到另一个应用程序 我的应用程序 我找到了这个cordova https stackoverflow com questions
  • 在 JavaScript 中检测页面是否加载到 WKWebView 中

    如何使用 javascript 可靠地检测到页面已加载到 WKWebView 中 我希望能够检测到这些场景 iOS 和 WKWebView iOS 和 Safari not iOS 关于 UIWebView 有一个类似的问题here htt
  • 在 UITableViewController 中重新排序行后 UI 更新不正确

    因此 我对表中的行重新排序 用户界面最终结果不正确 场景如下 表内容原文 a b c d e 如果我移动第 0 行 当前a 到第 4 行 当前e 我看到的最终结果是 c d e a a 一些背景 该表正在读取 Realm 对象的列表 我确认
  • 将 Armadillo C++ 库导入 Xcode

    我是 Mac 用户 正在尝试安装和导入 C Armadillo 库 以下是我到目前为止所采取的步骤 1 我从其网站下载了犰狳库 2 我仔细阅读了下载文件中的 Readme txt 文件 解释了如何安装它 3 我使用CMake将犰狳下载文件制
  • NSURLCache 不缓存

    我正在使用 Xcode 6 1 6A1030 iOS7 和 iOS8 模拟器 NSURLCache 似乎没有缓存任何东西 我使用 Cache Control 标头 我的服务器返回带有 max age 6000 的 Cache Control
  • 为arm64或arm7s编译OpenSSL FIPS功能库时出现未知的cpu类型

    我可以成功 至少没有警告并生成 a 文件 针对 arm7 x86 64 和 i386 进行编译 当我编译arm64时 我得到Unknown cpu type 100000c no adjustments made 当我编译arm7s时 我得
  • 使用 ZBarSDK 时 iPhone 相机失去自动对焦功能

    我正在开发一个应用程序 用户可以选择是否要扫描条形码或拍摄某物的照片 为了拍照 我正在使用UIImagePickerController照常 为了扫描条形码 我使用 ZbarSDK 1 2ZBarReaderViewController 拍
  • 如何在 iOS 上固定证书的公钥

    在提高我们正在开发的 iOS 应用程序的安全性时 我们发现需要对服务器的 SSL 证书 全部或部分 进行 PIN 操作以防止中间人攻击 尽管有多种方法可以做到这一点 但当您搜索此内容时 我只找到了固定整个证书的示例 这种做法会带来一个问题
  • WKWebview 中的 iCLoud 文档选择器关闭容器视图

    我有一个 WKWebview 加载基于 Web 的 UI 我希望用户能够从其 iCloud 文档上传文件 我已授予正确的权限 并且可以浏览 iCloud 文档 但是 当我选择文件或单击取消按钮时 文档选择器视图也会关闭 WKWebview
  • 下载进度条在 iOS 企业发行版中没有改变进度

    我正在通过企业分发开发和分发 iPad 应用程序 它们下载并执行良好 因此一切正常 Web 链接 ipa 文件 plist 文件 配置 问题 是 当用户单击链接进行下载时 iPad 中显示下载进度的进度条显示 正在等待 但却是空的并且永远不

随机推荐

  • 如何检查 System.IO.File.Delete 是否成功删除文件

    使用 system io file 类删除文件后 System IO File Delete openedPdfs path 如果文件已成功删除 我需要运行一些代码 只要该方法不返回任何值 我就会在删除方法之后检查文件是否存在 如果它仍然存
  • PHP docBlock @return 类名

    如何创建一个声明 return 的 PHP DocBlock 该 return 声明类的返回 目前这很简单 This returns an object of the User class return User public functi
  • Grails - 按查询中的两个字段排序

    我的项目中有这样一个域类 class Log Integer entityId Integer tableId Date logDt 我想通过某个tableId选择所有记录 并按entityId排序and林德描述 按一个字段排序效果很好 L
  • 绘图中的堆积条形图:如何控制每个堆栈中条形的顺序

    我正在尝试以绘图方式订购堆积条形图 但它不尊重我在数据框中传递它的顺序 最好使用一些模拟数据来显示 library dplyr library plotly cars lt sapply strsplit rownames mtcars s
  • Tkinter StringVar 错误

    您好 我在这段代码中遇到了一个错误 即 StringVar 未定义 这可能是一件小事 但我对 tkinter 没有那么丰富的经验 需要一些帮助 谢谢 这是我的代码 import tkinter as tk class Converter1
  • Godaddy cron 作业设置用于运行 php 脚本

    你能帮我在 godaddy webhosting 上设置 cron 作业吗 我有需要运行的 php 文件 它位于 cron 子目录中 所以地址是http test com cron file php http test com cron f
  • 如何在 R 中使用 gsub 进行精确字符串匹配? [复制]

    这个问题在这里已经有答案了 raw c MOUNTAIN VIEW MOUNTAIN x gsub MOUNTAIN MOUNTAIN VIEW raw ignore case TRUE Current output MOUNTAIN VI
  • Android:在 Fragment 中启动 Activity [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我是安卓开发新手 现在我的操作栏中有选项卡 我已经为这些片段创建了类 我的第一堂课目前只有一个按钮 稍后我会添加更多 当您单击按钮时 我尝试
  • ServiceLoader未加载新服务

    我的 ServiceLoader 不想加载我的新服务 我想我已经正确设置了一切 核心 Main public class Main public static void main String args System out println
  • 在“系统字体堆栈”中指定“Roboto”实际上有什么作用吗?

    CSS 的最新趋势是使用 系统 字体堆栈 它利用为用户操作系统设计的字体 通常这看起来像这样 body font family apple system BlinkMacSystemFont Segoe UI Roboto Oxygen S
  • MATLAB 解析特定于操作系统的路径

    我正在运行一个 MATLAB 项目 该项目由多个用户共享 一些用户运行 Windows 一些用户运行 Linux 在某些脚本中 我需要访问外部目录中的文件 但我不想将其添加到 MATLAB 路径中 为了适应 Linux 和 Windows
  • 在 grails 战争中包括 Liberation .ttf 字体?

    如何将解放字体与我的 grails war 打包在一起 这些字体在我要部署到的服务器上可能不可用 并且我的报告系统需要这些字体 如何将字体包含在 war 中 以便它们位于类路径上并可供 JVM 使用 如果您明确将它们用于 jasper re
  • 如何在 Symfony2 中删除服务定义?

    这个定义是在 Symfony v2 7 中添加的https github com symfony symfony blob 2 8 src Symfony Bundle FrameworkBundle Resources config tr
  • 无法解析外部 Xdebug 连接的服务器名称

    我有一个带有 xdebug 的 Docker 容器 当我运行脚本时 我需要形成 Docker 容器 我从 PhpStorm 收到以下消息 Cannot parse server name for external Xdebug connec
  • 两个地理位置的曼哈顿距离

    假设我有两个由纬度和经度表示的位置 地点 1 37 5613 126 978地点2 37 5776 126 973 如何使用曼哈顿距离计算距离 编辑 我知道计算曼哈顿距离的公式 如所述Emd4600答案是 x1 x2 y1 y2 但我认为这
  • 将数据帧复制到具有默认值列的 postgres 表

    我有以下 postgreSql 表stock 结构如下 insert time有一个默认值now column pk type id yes int type yes enum c date date qty int insert time
  • jsdoc :从其他模块引用 typedef-ed 类型

    假设我在 js 模块中有一个 typedef 类型 somewhere foo js module typedef Foo type object property string bar some property 是否可以在另一个模块中引
  • 在双图中标记点

    我已经执行了 PCA 并绘制了双标图R pca1 princomp data X250 data X500 data shear scores TRUE cor TRUE rownames data 1 biplot pca1 xlab P
  • 检测抖动中颜色是浅还是深

    有什么方法可以检查颜色是深还是浅 即颤动中的黑色色调或白色并获得布尔值 true 或 false 您还可以使用该方法获取亮度并应用 W3C 指定的阈值 在 dart 代码中 这可能如下所示 Color getFontColorForBack
  • 动画约束变化,位置动画,但高度跳跃没有动画

    我有一个自定义的 UIView 在该 UIView 中 我有一个带有黄色背景的 UILabel 其中包含 8 称为labelWhite 我以编程方式为该 UILabel 创建 4 个约束 顶部 左侧 宽度和高度 当我点击 UIView 时