如何在UIPanGesture上更改3D旋转? [英] How to change for 3D rotation on UIPanGesture?

查看:59
本文介绍了如何在UIPanGesture上更改3D旋转?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经完成了在点击时打开页面的动画处理,但是现在我必须将其更改为Pan Gesture.我应该如何开始?

I have done animation opening a page on tapping on it but now I have to change it for Pan Gesture. How should I start?

 [UIView setAnimationDelegate:self];
    [UIView commitAnimations];
    CALayer *layer = ges.view.layer;
    CATransform3D initialTransform = ges.view.layer.transform;
    initialTransform.m34 = 1.0 / -1100;
    layer.transform = initialTransform;
    layer.anchorPoint = CGPointMake(-0.0, 0.5);
    [UIView beginAnimations:@"Scale" context:nil];
    [UIView setAnimationDuration:2];
    [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
    CATransform3D rotationAndPerspectiveTransform = ges.view.layer.transform;
    rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, -M_PI , 0 , -ges.view.bounds.size.height/2, 0);
    ges.view.transform = CGAffineTransformRotate(ges.view.transform, 0);
    layer.transform = rotationAndPerspectiveTransform;
    [UIView setAnimationDelegate:self];
    [UIView commitAnimations];

推荐答案

UIPanGestureRecognizer myPanGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(imagePanned:)];
[_panGesture setMaximumNumberOfTouches:1];
[yourView addGestureRecognizer:myPanGesture];

1)如果您希望页面随着用户移动视图而平移,则必须这样做.

- (void)imagePanned:(UIPanGestureRecognizer *)iRecognizer {
    CGPoint translation = [recognizer translationInView:self.view];

    //Calculate transformation based on the translation value of pan gesture, this will be a tricky part

    [UIView animateWithDuration:0.5 delay: 0 options: 0 animations:
     ^(void) {
        //Apply transformation
     }
    completion: nil];
}

希望这会对您有所帮助.

扩展答案 * 这是第一个想法 *

您只想向右旋转视图? 然后使用CATransform3D,在这里您需要计算要应用于视图的iAngle.

You just want to rotate the view right ? then use CATransform3D, here you will need to calculate the iAngle that we are applying to view.

iAngle = //Calculate based on translation 

翻译所在的地方

CGPoint translation = [recognizer translationInView:self.view];

然后将转换应用于视图

CATransform3D myTransform = CATransform3DIdentity;
myTransform.m34 = 1.0 / -500;
myTransform = CATransform3DRotate(myTransform, DEGREES_TO_RADIANS(-iAngle), 0.0f, 1.0f, 0.0f);   //#define DEGREES_TO_RADIANS(d) (d * M_PI / 180)
yourView.layer.transform = myTransform;

这篇关于如何在UIPanGesture上更改3D旋转?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆