我正在尝试创建一个动画,允许用户从窗口的一侧拉出一个面板。右上角会显示少量 View ,通过拉动它, View 会向外旋转,固定在屏幕的右下角。希望这些图像显示了我想要实现的目标(右侧的纸张表明 View 的一部分将被隐藏。我希望用户能够拖动它,而不是滑动或点击。
任何人都可以指出我如何实现这一目标的正确方向吗?我对 iOS 中的动画还很陌生。我已经让平移手势起作用了,但我需要这个点来旋转。我可以设置 View 的 .center
属性,但这样做只会将整个 View 移动到那个点,所以我需要一个 center
来旋转,这实际上不是我认为在 View 中间?
编辑:我编写了一个有效的方法,但 View 并未“卡在”用户的手指上。我可以拖动我的手指,比如 45 度,但 View 移动的范围不止于此。不确定如何同步它们,有什么想法吗?
- (void) swipeSidebarOpen: (UIPanGestureRecognizer *) recognizer {
//[self openOrCloseSideBar: YES];
_sidebarView.layer.anchorPoint = CGPointMake(1.0, 1.0);
_sidebarView.layer.position = CGPointMake(510, 330);
UIView *shuttle = [recognizer view];
if ([recognizer state] == UIGestureRecognizerStateBegan || [recognizer state] == UIGestureRecognizerStateChanged) {
CGPoint vel = [recognizer velocityInView:[recognizer view]];
if (vel.x > 0) {
[recognizer view].transform = CGAffineTransformRotate([[recognizer view] transform], M_PI / 80.0f);
[recognizer setTranslation: CGPointZero inView:[shuttle superview]];
} else {
[recognizer view].transform = CGAffineTransformRotate([[recognizer view] transform], -M_PI / 80.0f);
[recognizer setTranslation: CGPointZero inView:[shuttle superview]];
}
}
}
最佳答案
有点晚了,但我写了一些代码来处理单指使用的平移、缩放和缩放。标准手势在微调工作或在出租车后部蹦来跳去时缺乏一定的准确性。
这两件事可能会对你有所帮助。旋转手势目标方法能够从捏合识别器或平移中接受。不过,您需要跟踪平移识别器的第一个触摸点落在何处,因为您将计算其当前点与手势起点之间的角度。您还需要保存屏幕中心。对我而言,我将所有这些点都放入了窗口的坐标系中,因此您必须选择要使用的点并坚持使用。
CGFloat /* midpoint, startpoint, point */
CGPointAngleATan2(CGPoint mp, CGPoint sp, CGPoint p)
{
CGFloat angle = 0;
CGFloat sAngle = atan2(sp.y-mp.y,sp.x-mp.x);
CGFloat pAngle = atan2(p.y-mp.y,p.x-mp.x);
angle = pAngle-sAngle;
return angle;
}
- (CGFloat)calculateRotation:(UIGestureRecognizer *)sender;
{
CGFloat rotation;
if ([sender respondsToSelector:@selector(rotation)]){
rotation = [(UIRotationGestureRecognizer *)sender rotation];
} else {
// convert to window co-ordinates, app specific so change if needed
CGPoint point = [sender locationInView:self.view.window];
rotation = CGPointAngleATan2(screenCenter,firstTouch,point);
}
return rotation;
}
关于objective-c - 使用 UIPanGestureRecognizer 围绕某个点旋转 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13644821/