Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UISweepGestureRecognitor不';t似乎不尊重iPhone 3G上当前的设备定位_Ios_Cocoa Touch_Cocos2d Iphone_Uigesturerecognizer_Uiswipegesturerecognizer - Fatal编程技术网

Ios UISweepGestureRecognitor不';t似乎不尊重iPhone 3G上当前的设备定位

Ios UISweepGestureRecognitor不';t似乎不尊重iPhone 3G上当前的设备定位,ios,cocoa-touch,cocos2d-iphone,uigesturerecognizer,uiswipegesturerecognizer,Ios,Cocoa Touch,Cocos2d Iphone,Uigesturerecognizer,Uiswipegesturerecognizer,我已经注册了四个UIgestureSwipereConceptors(每个方向一个),它们可以在iPhone4/4S(iOS 4.3和5)和iPad1/2(iOS 4.NotSure和5)上正常工作。这是一个游戏,所以唯一允许的设备方向是LandscapeRight和LandscapeLeft。然而,在配备iOS 4.1的iPhone3G上,滑动识别器的响应就像是将设备放在肖像中一样。换句话说,在iPhone3G上,在LandscapeLeft中应该向上滑动的内容将注册为右滑动。事实上,所有四个

我已经注册了四个UIgestureSwipereConceptors(每个方向一个),它们可以在iPhone4/4S(iOS 4.3和5)和iPad1/2(iOS 4.NotSure和5)上正常工作。这是一个游戏,所以唯一允许的设备方向是LandscapeRight和LandscapeLeft。然而,在配备iOS 4.1的iPhone3G上,滑动识别器的响应就像是将设备放在肖像中一样。换句话说,在iPhone3G上,在LandscapeLeft中应该向上滑动的内容将注册为右滑动。事实上,所有四个刷卡识别器的行为就像设备是纵向的;但是,我已经检查了
[[UIDevice currentDevice]orientation]
,它总是返回
uideviceorientation和scapeleft

case CCDeviceOrientationPortraitUpsideDown:
此外,该应用程序是基于CoCoS2D1.0.1模板构建的游戏

case CCDeviceOrientationPortraitUpsideDown:
我可能做错了什么

case CCDeviceOrientationPortraitUpsideDown:
这是我注册四个刷卡识别器的代码:

_swipeRecognizer_right = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeRightDetected)];
_swipeRecognizer_right.direction = UISwipeGestureRecognizerDirectionRight;
[self.view addGestureRecognizer:_swipeRecognizer_right];
_swipeRecognizer_right.delegate = self;

_swipeRecognizer_left = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeLeftDetected)];
_swipeRecognizer_left.direction = UISwipeGestureRecognizerDirectionLeft;
[self.view addGestureRecognizer:_swipeRecognizer_left];
_swipeRecognizer_left.delegate = self;

_swipeRecognizer_up = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeUpDetected)];
_swipeRecognizer_up.direction = UISwipeGestureRecognizerDirectionUp;
[self.view addGestureRecognizer:_swipeRecognizer_up];
_swipeRecognizer_up.delegate = self;

_swipeRecognizer_down = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeDownDetected)];
_swipeRecognizer_down.direction = UISwipeGestureRecognizerDirectionDown;
[self.view addGestureRecognizer:_swipeRecognizer_down];
_swipeRecognizer_down.delegate = self;
case CCDeviceOrientationPortraitUpsideDown:

除了转换方向之外,没有别的办法了。我在的“滑动手势识别器”中使用了这种内部方法,它应该很容易适应:

-(KKSwipeGestureDirection) convertSwipeDirection:(UISwipeGestureRecognizerDirection)uiDirection
{
    // portrait mode direction remains unchanged
    KKSwipeGestureDirection direction = (KKSwipeGestureDirection)uiDirection;

    switch (uiDirection)
    {
        case UISwipeGestureRecognizerDirectionRight:
        {
            switch (director.deviceOrientation)
            {
                case CCDeviceOrientationPortraitUpsideDown:
                    direction = KKSwipeGestureDirectionLeft;
                    break;
                case CCDeviceOrientationLandscapeLeft:
                    direction = KKSwipeGestureDirectionUp;
                    break;
                case CCDeviceOrientationLandscapeRight:
                    direction = KKSwipeGestureDirectionDown;
                    break;
                default:
                    break;
            }
            break;
        }

        case UISwipeGestureRecognizerDirectionLeft:
        {
            switch (director.deviceOrientation)
            {
                case CCDeviceOrientationPortraitUpsideDown:
                    direction = KKSwipeGestureDirectionRight;
                    break;
                case CCDeviceOrientationLandscapeLeft:
                    direction = KKSwipeGestureDirectionDown;
                    break;
                case CCDeviceOrientationLandscapeRight:
                    direction = KKSwipeGestureDirectionUp;
                    break;
                default:
                    break;
            }
            break;
        }

        case UISwipeGestureRecognizerDirectionUp:
        {
            switch (director.deviceOrientation)
            {
                case CCDeviceOrientationPortraitUpsideDown:
                    direction = KKSwipeGestureDirectionDown;
                    break;
                case CCDeviceOrientationLandscapeLeft:
                    direction = KKSwipeGestureDirectionLeft;
                    break;
                case CCDeviceOrientationLandscapeRight:
                    direction = KKSwipeGestureDirectionRight;
                    break;
                default:
                    break;
            }
            break;
        }

        case UISwipeGestureRecognizerDirectionDown:
        {
            switch (director.deviceOrientation)
            {
                case CCDeviceOrientationPortraitUpsideDown:
                    direction = KKSwipeGestureDirectionUp;
                    break;
                case CCDeviceOrientationLandscapeLeft:
                    direction = KKSwipeGestureDirectionRight;
                    break;
                case CCDeviceOrientationLandscapeRight:
                    direction = KKSwipeGestureDirectionLeft;
                    break;
                default:
                    break;
            }
            break;
        }
    }

    return direction;
}
case CCDeviceOrientationPortraitUpsideDown:
对于那些使用Cocos2D 2.x的用户,您应该知道CCDirector不再具有deviceOrientation属性。相反,您只需从UIDevice获取方向:

UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
case CCDeviceOrientationPortraitUpsideDown:
然后只需更改所有大小写标签,例如,用UI前缀替换CC

case CCDeviceOrientationPortraitUpsideDown:
应改为:

case CCDeviceOrientationPortraitUpsideDown:
case UIDeviceOrientationPortraitUpsideDown:

我已将@LearnCos2D提供的函数转换为仅适用于Cocos2d iphone的代码(即独立于Kobold2D):

case CCDeviceOrientationPortraitUpsideDown:

谢谢你的代码@learncos2d。您知道这是否是设备特定的问题吗?我想知道我需要在哪一套设备上转换滑动方向?事实上,我真正想知道的是,iPhone 3GS和4之间发生了什么变化,导致滑动尊重设备方向?这和陀螺仪有关吗?不,陀螺仪不在其中。我只能假设它一定与GameConfig.h有关。默认情况下,RootViewController用于自动旋转,但不用于第一代和第二代设备。也许这也会使iPhone3GS无法使用它?无论如何,这应该独立于设备或应用程序的自动旋转方式。对不起,我在之前的评论中说了“iPhone3GS”,但我的意思是“iPhone3G”。此外,我可以验证此解决方案是否独立于设备(在iPhone 4、3G和iPod touch 1G上进行了测试)。谢谢!我还将cocos2d2.x的补丁添加到我的帖子中。