你可以在滚动时添加弹性单元格效果(如在iOS7上的Messages应用程序中)到UITableView?我已经看过它的一些例子UICollectionView,但是对于表格视图来说绝对没有.
这是不可能的,我应该将每个表视图更改为集合视图并重做所有单元格?
我正在尝试找出与Jelly的应用程序类似的工具UIKit Dynamics(特别是向下滑动以在屏幕外拖动视图).
看动画:http://vimeo.com/83478484(@ 1:17)
我理解UIKit Dynamics是如何工作的,但是没有很好的物理背景,因此无法梳理不同的行为以获得理想的结果!
我有一个水平UICollectionView的自定义UICollectionViewFlowLayout,UIAttachmentBehavior每个单元格都有一个设置,以便在向左和向右滚动时给它一个弹性的感觉.该行为具有以下属性:
attachmentBehavior.length = 1.0f;
attachmentBehavior.damping = 0.5f;
attachmentBehavior.frequency = 1.9f;
Run Code Online (Sandbox Code Playgroud)
将新单元格添加到集合视图时,它会添加到底部,然后使用a将其设置为其位置UIAttachmentBehavior.当然它会一点一点地反弹,直到它停留在它的位置上.一切都按预期工作到现在为止.

在新添加的单元格停止之前向左或向右滚动集合视图时,我开始出现问题.这增加了单元格已经具有的向上和向下的左右弹性.这导致细胞中非常奇怪的圆周运动.

我的问题是,是否可以在滚动集合视图时停止UIAttachmentBehavior的垂直运动?我已尝试过不同的方法,例如使用多个附件行为并在集合视图中禁用滚动,直到新添加的单元格停止,但它们中的任何一个似乎都不会停止此操作.
作为实现UICollisionBehaviour的一部分,我为屏幕边缘设置了边界.然后我添加了一些视图,最后将一个UIPanGestureRecognizer附加到其中一个.
现在我可以使用我的可拖动视图来推动较小的视图.

问题: 如果我将较小的视角转向并将其推向屏幕边缘,它最终将滑过边界并被困在另一侧.我用来击打和推动其他视图的"锤子视图"也会陷入界限.即它在屏幕的一侧被卡住/不可拖动.
我做了一个非常小的例子,看看当我的视图很少而且没有相互冲突的行为时我是否可以重现它,视图仍然可以通过边界.无论是UIDynamics都无法处理,或者(更有可能)我以某种方式配置错误.
下面的小例子有奇怪的行为:
class ViewController: UIViewController {
var animator: UIDynamicAnimator?
var collisionBehaviour: UICollisionBehavior?
var panBehaviour: UIAttachmentBehavior?
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
setup()
}
func setup() {
//setup collisionBehaviour and animator
collisionBehaviour = UICollisionBehavior()
collisionBehaviour!.collisionMode = UICollisionBehaviorMode.allZeros
animator = UIDynamicAnimator(referenceView: view)
//add boundaries
collisionBehaviour!.addBoundaryWithIdentifier("verticalMin", fromPoint: CGPointMake(0, 0), toPoint: CGPointMake(0, CGRectGetHeight(view.frame)))
collisionBehaviour!.addBoundaryWithIdentifier("verticalMax", fromPoint: CGPointMake(CGRectGetMaxX(view.frame), 0), toPoint: CGPointMake(CGRectGetMaxX(view.frame), CGRectGetHeight(view.frame)))
collisionBehaviour!.addBoundaryWithIdentifier("horizontalMin", fromPoint: CGPointMake(0, CGRectGetMaxY(view.frame)), toPoint: CGPointMake(CGRectGetMaxX(view.frame), CGRectGetMaxY(view.frame)))
collisionBehaviour!.addBoundaryWithIdentifier("horizontalMax", fromPoint: CGPointMake(0, 0), toPoint: CGPointMake(CGRectGetMaxX(view.frame), 0)) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用所谓的"自我调整单元",这意味着:
estimatedItemSize上flowLayoutpreferredLayoutAttributesFittingAttributes细胞类例如:UICollectionView具有自动布局的自定义单元格
我需要这样的动态效果:http://www.teehanlax.com/blog/implementing-a-bouncy-uicollectionviewlayout-with-uikit-dynamics/
没有UIDynamic,它工作正常,但我需要UIDynamic.正如我所看到的那样,它会调用prepareLayout并且layoutAttributesForElementsInRect直到死亡,将会有太多_updateVisibleCellsNow排队等待.
我不知道如何解决这个问题,如果你看到,请帮助我.或者,如果我以错误的方式使用这些技术,请告诉我.
ios uicollectionview uicollectionviewcell uicollectionviewlayout uikit-dynamics
当您在iOS 7中的消息应用程序中进行对话时,如果向上或向下滚动,您会注意到气泡以及发送消息时所说的文本将更多地反弹到位.
我试图在我自己的表视图中复制它,但我没有找到一种方法来做到这一点.
我假设它使用的是UIDynamics,但我不确定如何将其与滚动和内容弹跳联系起来.
任何帮助,将不胜感激
好的基本概述.我有一个UICollectionView我需要支持通过该performBatchUpdates:方法添加和删除项目.如果我使用标准UICollectionViewFlowLayout,它工作正常.
但是,当我尝试使用UICollectionViewFlowLayout由a驱动的时UIDynamicAnimator,我一打电话就会崩溃performBatchChanges.
在我的自定义UICollectionViewFlowLayout类中,prepareForCollectionViewUpdates:永远不会调用该方法.UICollectionViewFlowLayout我使用的自定义基于此示例.
崩溃后的控制台输出是......
*** Assertion failure in -[UICollectionViewData layoutAttributesForItemAtIndexPath:], /SourceCache/UIKit/UIKit-2903.23/UICollectionViewData.m:581
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'no UICollectionViewLayoutAttributes instance for -layoutAttributesForItemAtIndexPath: <NSIndexPath: 0xc000000000028096> {length = 2, path = 2 - 5}'
*** First throw call stack:
libc++abi.dylib: terminating with uncaught exception of type NSException
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
objective-c ios uicollectionview uicollectionviewlayout uikit-dynamics
我对自动布局很新,我对如何动画视图感到困惑.
我读了很多,我知道你必须坚持约束,编辑它,并将其包装layoutIfNeeded在一个UIView动画块中.
但是当谈到这样做时,我有点失落.如果有人可以解释我这个动画是如何完成的,我会很高兴.
我认为它可能使用a UIPanGestureRecognizer来改变constant前导空间到容器约束,但它可能使用UIDynamics(对于右边的反弹效果?).
我知道有很多关于如何使用UIKitDynamics实现一个有弹性的collectionViewLayout的教程和讨论.
甚至有一个WWDC 13 Session视频解决了在iOS7消息应用程序中复制"消息气泡"的确切主题.
我在会话视频之后创建了自己的"弹性布局"并使用本教程,该教程还提供了实现平铺机制的详细信息,这确保了即使有数千个单元格也能顺利运行.
但是,结果仍然与我们在消息应用程序中看到的非常不同,我的目标是将EXACT SAME BEHAVIOR复制为消息应用程序.
UIAttachmentBehavior物业(长度,阻尼,频率)提供多少不同的值,我都无法获得正确的弹跳.
开发人员论坛中有一个讨论:Apple Dev论坛讨论
有人建议每个Cell使用多个UIAttachmentBehaviors,其他人说应用UIView - spring动画可以给你这个想要的效果.甚至假设消息应用程序根本不使用UIKitDynamics + UICollectionView.(我怀疑Apple没有使用这种明显的技术)
所以我的问题是:有没有人成功实现了Message bubbles行为的精确复制?我还能做些什么来获得有关此主题的答案?
objective-c ios uicollectionview uicollectionviewlayout uikit-dynamics
我正在玩UIKitDynamics,它真的很整洁.目前我有这个代码:
CGPoint center = [newSelectedLabel center];
[self.animator removeBehavior:self.snapBehavior];
self.snapBehavior = [[UISnapBehavior alloc] initWithItem:self.indicatorView snapToPoint:center];
self.snapBehavior.damping = 0.67;
[self.animator addBehavior:self.snapBehavior];
[self.delegate didChangeToIndex:sender.tag];
Run Code Online (Sandbox Code Playgroud)
这是一个简单的快照行为,它运作良好.但是,出于各种原因,我想知道系统什么时候进入"休息"状态 - 即一切都停止了.我对动画师的属性或委托方法都很好.
我怎样才能做到这一点?
ios ×10
uikit-dynamics ×10
objective-c ×4
ios7 ×2
animation ×1
autolayout ×1
ios8.1 ×1
iphone ×1
swift ×1
uikit ×1
uitableview ×1