gpt4 book ai didi

ios - 使用平移手势平滑地动画约束变化

转载 作者:技术小花猫 更新时间:2023-10-29 10:17:34 24 4
gpt4 key购买 nike

How to animate constraint change smoothly with pan gesture in iOS?

我正在尝试开发一个屏幕,其中一个 View 位于屏幕底部。我在该 View 中添加了平移手势。在拖动该 View 时,我想更改该 View 的顶部约束。平移手势只允许在垂直和向下方向。我为拖动 View 添加了一些限制。它工作但不顺利。如何使用平移手势平滑地动画约束变化?这是我的代码。

 - (void)handleGesture:(UIPanGestureRecognizer *)sender
{
CGPoint velocity = [sender velocityInView:_locationContainer];

[sender setTranslation:CGPointMake(0, 0) inView:self.view];

if (fabs(velocity.y) > fabs(velocity.x)) {

NSLog(@"velocity y %f ",velocity.y * 0.13);

if(velocity.y < 0 && (self.locationDetailsTop.constant > minimumTop) )
{
NSLog(@"gesture moving Up");
self.locationDetailsTop.constant = self.locationDetailsTop.constant - fabs(velocity.y * 0.1);
}
else if (self.locationDetailsTop.constant < firstTop)
{
NSLog(@"gesture moving Bottom");

self.locationDetailsTop.constant = self.locationDetailsTop.constant + fabs(velocity.y * 0.1);
}

[self.view layoutIfNeeded];
[UIView animateWithDuration:0.1 animations:^{
[self.mapView setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.locationContainer.frame.origin.y)];
}];
}
}

这是示例图片,我的屏幕是这样的,但是在我的屏幕上,有一个 map View 而不是日历 View

enter image description here

最佳答案

要在用户触摸屏幕时移动 View ,您可以使用 translationInView:属性(property)。你可以set a translation到当前约束的值并获取新值(在 UIGestureRecognizerStateBegan 的处理程序中)并在 UIGestureRecognizerStateChanged 的处理程序中更改约束的常量:

- (void)padRecognizerStateChanged:(UIPanGestureRecognizer*)sender
{
if(sender.state == UIGestureRecognizerStateBegan)
{
[sender setTranslation:CGPointMake(0.0, [self getConstraintValue]) inView: _locationContainer];
}
else if (sender.state == UIGestureRecognizerStateChanged)
{
[self setConstraintValue: [sender translationInView:_locationContainer].y];
[self.view setNeedsLayout];
}
}

如果您需要在用户将拇指放在屏幕上向上或向下移动时移动 View ,您可以使用速度。比如可以实现减速效果。

关于ios - 使用平移手势平滑地动画约束变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49607151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com