gpt4 book ai didi

ios - 使用平移手势重置 UIView 的框架,无需硬编码起始值

转载 作者:行者123 更新时间:2023-12-01 17:58:38 25 4
gpt4 key购买 nike

我有一个附加到 UIView 的 UIPanGestureRecognizer。我想做的基本上是拖放到一个桶中。如果用户放开 UIView 而它不在桶中,我希望它以动画方式回到其原始开始位置。为我的 UIPanGestureRecognizer 调用的选择器是:

- (void)handleDragDescriptionView:(UIPanGestureRecognizer *)gestureRecognizer {
UIView *panViewPiece = [gestureRecognizer view];
CGRect originalFrame = CGRectMake(946, 20, 58, 30);

CGPoint translation = [gestureRecognizer translationInView:panViewPiece];
if (gestureRecognizer.state == UIGestureRecognizerStateBegan || gestureRecognizer.state == UIGestureRecognizerStateChanged) {
panViewPiece.center = CGPointMake(panViewPiece.center.x + translation.x, panViewPiece.center.y + translation.y);

[gestureRecognizer setTranslation:CGPointZero inView:panViewPiece.superview];
}
else if (gestureRecognizer.state == UIGestureRecognizerStateCancelled) {
[UIView animateWithDuration:0.25 animations:^{
self.dragDescriptionView.frame = originalFrame;
}];
}
else {
[UIView animateWithDuration:0.25 animations:^{
self.dragDescriptionView.frame = originalFrame;
}];
}

}

我想知道我是否可以在方法顶部没有 originalFrame 的情况下执行此操作。我原来有

CGRect originalFrame = _dragDescriptionView.frame; 

而不是硬编码,但它不会回弹。可能是因为我在拖动时正在更新该值。我不是特别喜欢硬编码值,但我不确定是否有办法解决这个问题。谢谢!

最佳答案

您实际上只需要跟踪 View 的原始中心。将 originalCenter 设为实例变量,并仅在手势开始时设置它:

@implementation MyViewController {
CGPoint _originalCenter;
}

- (void)handleDragDescriptionView:(UIPanGestureRecognizer *)gestureRecognizer {
UIView *panViewPiece = [gestureRecognizer view];

switch (gestureRecognizer.state) {
case UIGestureRecognizerStateBegan:
_originalCenter = panViewPiece.center;
break;

case UIGestureRecognizerStateChanged: {
CGPoint translation = [gestureRecognizer translationInView:panViewPiece.superview];
panViewPiece.center = CGPointMake(panViewPiece.center.x + translation.x, panViewPiece.center.y + translation.y);
[gestureRecognizer setTranslation:CGPointZero inView:panViewPiece.superview];
break;
}

case UIGestureRecognizerStateEnded:
case UIGestureRecognizerStateCancelled: {
[UIView animateWithDuration:0.25 animations:^{
panViewPiece.center = _originalCenter;
}];
break;
}

default:
break;
}
}

关于ios - 使用平移手势重置 UIView 的框架,无需硬编码起始值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13353288/

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