gpt4 book ai didi

iPhone iOS 如何使 UIRotationGestureRecognizer 和 UIPinchGestureRecognizer 协同工作以缩放和旋转带有 subview 的 UIView?

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

我正在我的应用程序中实现拖放/调整大小/旋转标签。到目前为止,除了 UIRotationGestureRecognizer 手势外,一切正常。更具体地说,它不适用于 UIPinchGestureRecognizer 手势。

通常这两个手势会竞争两个手指触摸,所以我并行运行它们。下面是我的手势识别器调用的 2 个方法。

当做旋转手势时, View 会围绕它的中心旋转,它的高度和宽度变化如下:高度变成宽度,宽度慢慢变成高度。最终, View 消失了。

在 View 中,我有另一个自动调整大小的 View 。通常,捏合手势也会自动调整 subview 的大小,但在这种情况下,带有自动调整大小 mask 的 subview 会消失。 subview 具有高度和宽度 Spring 以及左/顶部支柱。

我做错了什么?如何使用手势调整 UIView 的大小和缩放?

所有委托(delegate)方法和连接都已正确设置。 我需要了解如何处理识别器应用缩放和旋转的顺序。

//makes 2 gesture recognizers behave together
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
}

- (IBAction)handleRotationFrom:(id)sender {
NSLog(@"Gesture rotation %.1f", rotationGestureRecognizer.rotation);

//attempt to continuously rotate the label, starting with a remembered rotation

float rotation = atan2(activeCompanionLabelView.transform.b, activeCompanionLabelView.transform.a);
NSLog(@"existing rotation %.1f", rotation);

// rotation = rotation<0?(2*M_PI)-fabs(rotation):rotation;
rotation +=rotationGestureRecognizer.rotation;

NSLog(@"*** gesture rotation %.1f sum: %.1f, saved: %.1f",rotationGestureRecognizer.rotation, rotation, activeCompanionLabelView.savedRotation);
activeCompanionLabelView.transform = CGAffineTransformMakeRotation((rotation));
activeCompanionLabelView.savedRotation = rotation;
}

- (IBAction)handlePinch:(id)sender {
NSLog(@"pinch %.2f", pinchGestureRecognizer.scale);

//resize, keeping the origin where it was before

activeCompanionLabelView.frame = CGRectMake(activeLabelContainerFrame.origin.x, activeLabelContainerFrame.origin.y, activeLabelContainerFrame.size.width*pinchGestureRecognizer.scale, activeLabelContainerFrame.size.height*pinchGestureRecognizer.scale);



}

最佳答案

如果你想要两个gestureRecognisers并行(同时)运行你的 view应该实现 <UIGestureRecognizerDelegate> .

此外,您应该使它成为 gestureRecognizers 的代表.

rotationGestureRecognizer.delegate=self;
pinchGestureRecognizer.delegate=self;

你还应该实现 shouldRecognizeSimultaneouslyWithGestureRecognizer:方法:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {

return YES;
}

注意:如果你有更多那么这两个 gestureRecognisers在你的view您将不得不在此方法中添加一些身份检查。

编辑:

刚找到 Ole Begemann 关于此主题的文章:Gesture Recognition on iOS with Attention to Detail

关于iPhone iOS 如何使 UIRotationGestureRecognizer 和 UIPinchGestureRecognizer 协同工作以缩放和旋转带有 subview 的 UIView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9751307/

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