加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 使用UIPanGestureRecognizer围绕某个点旋转UIVie

发布时间:2020-12-16 05:02:35 所属栏目:百科 来源:网络整理
导读:我正在尝试创建一个允许用户从窗口侧面拉出面板的动画.在右上方可以看到少量视图,通过拉动视图,视图将向外旋转,固定在屏幕的右下角.希望这些图像显示我想要实现的内容(右侧的纸张表示视图的一部分将被隐藏.我希望用户能够拖动它,而不是滑动或点击. 任何人都
我正在尝试创建一个允许用户从窗口侧面拉出面板的动画.在右上方可以看到少量视图,通过拉动视图,视图将向外旋转,固定在屏幕的右下角.希望这些图像显示我想要实现的内容(右侧的纸张表示视图的一部分将被隐藏.我希望用户能够拖动它,而不是滑动或点击.

任何人都能指出我如何实现这一目标的正确方向吗?我对iOS中的动画很陌生.我已经完成了平移手势,但是我需要这一点来旋转.我可以设置视图的.center属性,但这样做只会将整个视图移动到那一点,所以我需要一个中心来旋转,实际上它不是视图的中间,我想?

编辑:我写了一个有效的方法,但视图并没有“卡住”用户的手指.我可以用手指拉动,比方说,45度,但是视野会移动得更多.不确定我如何同步它们,任何想法?

- (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]];
        }
    }
}

解决方法

默认情况下,视图将围绕其中心旋转,但您可以通过为视图图层设置另一个anchorPoint来更改它. (您需要导入Core Animation才能执行此操作(QuartzCore.framework)).

锚点被标准化(X和Y都从0变为1).默认情况下,它位于中心(0.5,0.5),但您想将其更改为右下角(1.0,1.0).

myView.layer.anchorPoint = CGPointMake(1.0,1.0);

更改anchorPoint将在屏幕上直观地移动视图,以便超视图中视图图层的位置与视图旋转的点相同.

myView.layer.position = theFixedHerePoint; // The point you are showing in your drawing...

例如:如果superview从(0,0)变为(100,100),那么myView的位置应该是右下角的位置,而不是myView中心的位置.如下图所示(X是anchorPoint(1,1)和位置(95,95)).请注意,95只是一个任意值.

┌───────────────────┐
│ superview         │
│                   │
│      ┌──────────┐ │
│      │ myView   │ │
│      │          │ │
│      │          │ │
│      └──────────X │
└───────────────────┘

现在,当您平移时,您可以简单地设置适当的旋转变换,视图将围绕其右下角旋转.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读