- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
所以我试图为一些布局约束设置动画,但运气很差,我什么也没看到,然后我收到一条错误消息,说明它如何不能同时满足所有约束等。
我正在使用一个名为 PullableView 的类谁的动画用的是旧风格[UIView commitAnimation]
所以我对它进行了子类化并在我的代码中添加了我认为用于动画约束的东西......没有这样的运气并且试图为其制作动画甚至让它做很多事情被证明是困难的我只是得到“无法同时满足约束”。问题是我对这个约束业务还很陌生,所以我不知道从哪里开始。
这是错误,另一个几乎相同,但针对 centerY。
"<NSLayoutConstraint:0x7c8a3a0 StyledPullableView:0x905a9b0.centerX == UIView:0x9054680.centerX>",
"<NSLayoutConstraint:0x7c6b480 StyledPullableView:0x905a9b0.centerX == UIView:0x9054680.centerX + 128>"
我当然会[pullRightView setTranslatesAutoresizingMaskIntoConstraints:NO];
在调用这个之前
感谢任何帮助。
- (void)setOpenedForConstraints:(BOOL)op animated:(BOOL)anim
{
opened = op;
if (anim)
{
NSLayoutConstraint *constraintX = [NSLayoutConstraint constraintWithItem:self
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:_parentView
attribute:NSLayoutAttributeCenterX
multiplier:1
constant:0];
NSLayoutConstraint *constraintY = [NSLayoutConstraint constraintWithItem:self
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:_parentView
attribute:NSLayoutAttributeCenterY
multiplier:1
constant:0];
[_parentView addConstraint:constraintX];
[_parentView addConstraint:constraintY];
constraintX.constant = opened ? self.openedCenter.x : self.closedCenter.x;
constraintY.constant = opened ? self.openedCenter.y : self.closedCenter.y;
}
if (anim)
{
// For the duration of the animation, no further interaction with the view is permitted
dragRecognizer.enabled = NO;
tapRecognizer.enabled = NO;
//[UIView commitAnimations];
[UIView animateWithDuration:animationDuration
animations:^
{
[self layoutIfNeeded];
}];
}
else
{
if ([delegate respondsToSelector:@selector(pullableView:didChangeState:)])
{
[delegate pullableView:self didChangeState:opened];
}
}
}
最佳答案
几个想法:
您正在此处创建新的约束。通常,您将调整现有约束的 constant
。或者,如有必要,您将删除旧约束并添加新约束。
更改现有约束时,有两种方法。一种是遍历 View 的约束,找到有问题的约束,然后为此调整 constant
。另一种方法(当 View 是您在 Interface Builder 中添加的 View 时要容易得多)是在 Interface Builder 中为约束创建一个 IBOutlet
。然后你可以为它制作动画。
This answer ,在关注另一个问题的同时,说明了为约束创建 IBOutlet
然后为其值的变化设置动画的过程。
如果您必须遍历约束来寻找约束(例如,从您可能使用视觉格式语言创建的整个集合中挑选出一个约束),那么 replaceLeadingAndTopWithCenterConstraints
在this answer中说明可能是一个有用的示例,说明您如何在现有 View 上找到约束。这个特定示例是删除一个约束并添加一个新约束,但是您可以同样轻松地在找到现有约束后调整其常量。
我不完全确定您想要的用户体验,但假设您有一个要滑到屏幕左侧的面板:
第一个问题是您定义了哪些约束:在这个示例中,我定义了四个约束,其中三个到父 View (即顶部、底部和左侧,但不是右)和宽度约束。如果你在 IB 中这样做,它可能会很挑剔(例如,在添加宽度约束之前你不能删除右约束)。只需确保约束已完全定义,但至少如此。
然后我可以通过更改左约束的 constant
为面板滑动屏幕设置动画:
- (IBAction)touchUpInsideButton:(id)sender
{
self.offscreen = !self.offscreen;
[UIView animateWithDuration:0.5
animations:^{
self.panelLeftConstraint.constant = ([self isOffscreen] ? -kHowMuchToSlideOffToLeft : 0.0);
[self.view layoutIfNeeded];
}];
}
您现在可以明白为什么确保没有定义正确的约束很重要了。因为如果我在定义了宽度约束 和 右约束的同时调整了左约束,那么它将变得无法满足。通过确保在开始时对约束进行最低限度的定义(尽管定义明确),我可以更改左侧约束,并且 View 现在可以按照我想要的方式进行动画处理。
关于ios - 程序化 NSLayoutConstraint 动画问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16662132/
我是一名长期开发人员,但对 DNS 的经验并不丰富。这是我的问题: 我们的应用程序在 Amazon EC2 上为客户启动服务器。一个客户希望为每台启动的服务器使用自定义 DNS,而不是 AWS 提供的
我正在尝试以编程方式添加几个从 TextViews 扩展到 RelativeLayout 的 Tiles。 我的代码如下。 RelativeLayout.LayoutParams params = n
如果我在黑莓 (5.0.0) 上的电话应用程序中输入电话号码,我可以点击菜单按钮,其中一个选项是“添加到联系人”,这将显示添加联系人屏幕,电话号码已经人口稠密。我想在我的应用程序中做同样的事情 - 调
我试图将 Android XML 的外观与以编程方式创建它的方式关联起来,但我惨遭失败。我读过几个引用资料,指出 View 的 LayoutParams 类型必须等于父级的类型,但我只是不理解它。 给
我正在尝试创建 Joda 2.2 DateTimeFormatter 来重构我的代码。我试图重现的行为是 private String getSemesterLabel() { StringB
我几乎所有的用户界面都是以编程方式完成的,并在 Interface Builder 中进行了轻微的修改。但是 99% 的 UI 完全是用代码完成的,因为我觉得通过以下方式可以获得一定程度的灵 acti
我正在尝试学习如何以编程方式创建不同的 UI 元素。我的 UITableView 面临以下问题.. 我有 2 个 .swift 文件,一方面,我们有.. struct Settings
我想使用ONLY编程语法创建页面布局,但我无法将带有左、中、右内容 Pane 的边框容器插入到主 Pane 的顶部 Pane 中布局(底部布局也是如此)。 每次我尝试使用内容 Pane 作为父级时,都
我需要一些指示从哪里开始: 从任何使用 ALSA 播放音频的应用程序到连接的扬声器,我想获取样本并进行一些音频处理。我无法控制播放器,我希望能够处理来自任何来源的音频。基本上它将是一个 UV 计,也许
我想以编程方式(因为文件路径是在运行时生成的)为 SQL 语句创建一个单独的日志文件。我的代码看起来像这样 public static void InitializeLogger(FileInfo
如何以编程方式关闭嵌入式 jetty 服务器? 我这样启动 jetty 服务器: Server server = new Server(8090); ... server.start(); serve
我有一个派生自 QGraphicsView 的自定义类,它实现了一个插槽调用 scrollHorizontal(int dx),里面的代码很简单 void CustomView::scrollHo
我正在尝试了解在 ios 中布局 UI 的最佳实践。具体来说,我试图了解以下优点/缺点:纯编程 UI、 Storyboard和 XIB,以及 ios 6.0+ 中的自动布局。 我已经习惯了纯程序化 U
我正在尝试做类似于提出此问题的用户正在尝试做的事情: HTTPS Request From a Credential Provider DLL 关于用户个人资料的组成部分,我找到了this . Win
所以我试图为一些布局约束设置动画,但运气很差,我什么也没看到,然后我收到一条错误消息,说明它如何不能同时满足所有约束等。 我正在使用一个名为 PullableView 的类谁的动画用的是旧风格[UIV
我有大量的 Python 代码,需要对其施加符合 pep8 的样式/格式。 pep8 有各种规则的变体(如 this one by a coworker ),但最难的是处理分割太长的行和格式化修改后的
我试图让 ZeroClipboard API 工作,但看起来 setText() 函数没有效果。 提供简单示例 > here Copy to Clipboard ZeroClipboa
假设我有一个这样的错误应用程序: using System; namespace ConsoleApplication1 { class Program { stati
我是 Android 开发的新手,但遇到以下问题。我正在尝试以编程方式创建多个 ImageView 并使用 Picasso 加载图像,但我无意中发现了以下问题。 编辑:我想要实现的是我希望使用 wid
我需要以编程方式将 RDP 连接到虚拟机 (XP SP3/.NET3.5/VS 2008),(凭据已保存在 .rdp 文件中)并进行 UI 自动化测试。由于我们的域安全性,我需要以编程方式对交互式登录
我是一名优秀的程序员,十分优秀!