iPad应用横向启动时无法识别水龙头和手势

堆栈下溢

当我以横向模式在iPad上启动通用应用程序时,该应用程序将无法识别屏幕上最靠近主页按钮的侧面上的轻拍或手势。我已经遍历了所有关于stackoverflow的类似问题,以试图弄清这一点,但是我无法使其正常工作。

看来,视图层次结构中的一个视图是纵向的,而不是横向的,但是我找不到尺寸不正确的任何视图。另外,请注意,该应用在以纵向模式启动时可以正常运行,并且可以正确旋转,并且旋转后可以识别所有轻拍。但是,当在横向模式下启动时,屏幕的一侧始终会存在一个“死区”,无法识别水龙头。

视图层次结构如下所示:

UIWindow (frame: 0, 0, 1024, 768)
UINavigationController
  UIViewController
    UIView (frame: 0, 0, 1024, 768)
      GLView (frame: 0, 0, 1024, 768)

我检查了视图的框架和边界,设置clipsToBounds = YES并更改了它们的背景颜色,以查看它们的布局是否正确,但它们是否都按预期占据了整个屏幕(1024x768)。

我继承UIWindow并覆盖了该sendEvent:方法,当我点击屏幕左侧的盲区时,根本没有调用它。这是否表明问题可能出在哪里?

这是创建窗口的我的应用程序委托:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    // Create the main window
    CGRect windowFrame = [[UIScreen mainScreen] bounds];
    if (application.statusBarOrientation == UIInterfaceOrientationLandscapeLeft || application.statusBarOrientation == UIInterfaceOrientationLandscapeRight) {
        windowFrame = CGRectMake(0, 0, windowFrame.size.height, windowFrame.size.width);
    }
    window_ = [[MyUIWindow alloc] initWithFrame:windowFrame];

    navController_ = [[BFNavigationController alloc] init];
    navController_.navigationBarHidden = YES;

    // for rotation and other messages
    [[CCDirector sharedDirector] setDelegate:navController_];

    // set the Navigation Controller as the root view controller
    [window_ setRootViewController:navController_];

    bfViewController_ = [[BFViewController alloc] init];
    [navController_ pushViewController:bfViewController_ animated:NO];

    // make main window visible
    [window_ makeKeyAndVisible];

    return YES;
}

这是配置UIView的UIViewController的viewDidLoad方法:

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIWindow *mainWindow = (UIWindow*)[UIApplication sharedApplication].windows.firstObject;
    self.view.frame = mainWindow.bounds;

    self.view.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
    self.view.autoresizesSubviews = YES;
    self.view.clipsToBounds = YES;

    [self initCocos2D];

}

这是创建GLView的位置:

- (void)initCocos2D {

    UIWindow *window = [[[UIApplication sharedApplication] windows] firstObject];
    CCDirector *director = (CCDirectorIOS*) [CCDirector sharedDirector];

    CCGLView *glView = [CCGLView viewWithFrame:[window bounds]
                                   pixelFormat:kEAGLColorFormatRGB565
                                   depthFormat:0
                            preserveBackbuffer:NO
                                    sharegroup:nil
                                 multiSampling:NO
                               numberOfSamples:0];

    glView.clipsToBounds = YES;
    [glView setMultipleTouchEnabled:YES];

    director.wantsFullScreenLayout = YES;

    // set FPS at 60
    [director setAnimationInterval:1.0/60];

    // attach the openglView to the director
    [director setView:glView];

    // 2D projection
    [director setProjection:kCCDirectorProjection2D];

    // Enables High Res mode (Retina Display) on iPhone 4 and maintains low res on all other devices
    if( ! [director enableRetinaDisplay:YES] )
        CCLOG(@"Retina Display Not supported");

    // Default texture format for PNG/BMP/TIFF/JPEG/GIF images
    // It can be RGBA8888, RGBA4444, RGB5_A1, RGB565
    // You can change this setting at any time.
    [CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888];

    // Assume that PVR images have premultiplied alpha
    [CCTexture2D PVRImagesHavePremultipliedAlpha:YES];

    [self.view insertSubview:glView atIndex:0];

    [[CCDirector sharedDirector] startAnimation];
}

手势识别器已添加到glView中,并由cocos2D游戏层处理:

UIPanGestureRecognizer *panGestureRecognizer = [[[UIPanGestureRecognizer alloc] initWithTarget:layer action:@selector(handlePan:)] autorelease];
    [[CCDirector sharedDirector].view addGestureRecognizer:panGestureRecognizer];

    UITapGestureRecognizer *tapGestureRecognizer = [[[UITapGestureRecognizer alloc] initWithTarget:layer action:@selector(handleTap:)] autorelease];
    [[CCDirector sharedDirector].view addGestureRecognizer:tapGestureRecognizer];

    UIPinchGestureRecognizer *pinchGestureRecognizer = [[[UIPinchGestureRecognizer alloc] initWithTarget:layer action:@selector(handlePinch:)] autorelease];
    [[CCDirector sharedDirector].view addGestureRecognizer:pinchGestureRecognizer];

这真让我抓狂; 任何帮助将非常感激。

堆栈下溢

我可以通过以下步骤解决此问题:

创建UIWindow[UIScreen mainscreen].bounds为其框架,该框架将始终为纵向。我以前是根据方向更改窗口边界的,这是不正确的。

使用当前状态栏方向确定纵向/横向,并相应地设置最低级别的UIView框架。(即,横向使用1024x768,纵向使用768x1024)

将glView的框架设置为其父UIView的边界,而不是窗口的边界

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Swift:长按手势识别器-检测水龙头和长按

来自分类Dev

在同一视图上处理水龙头和捏手势

来自分类Dev

可视化水龙头/手势以进行颤动测试(或颤动驱动程序)

来自分类Dev

如何在启动时让Spring XD部署一组预定义的流和水龙头

来自分类Dev

为什么此UITapGestureRecognizer无法识别水龙头?

来自分类Dev

使用水龙头在iOS上启动应用

来自分类Dev

当手势已经处于活动状态时,如何启动手势识别器?

来自分类Dev

具有自定义UIView(包括按钮)的UIViewController无法识别水龙头

来自分类Dev

Swift:无法识别点击手势

来自分类Dev

GestureDetector无法识别手势

来自分类Dev

无法识别滑动手势

来自分类Dev

无法完全摆脱Android 4.1.2上的Phonegap 3.0应用中的水龙头突出显示颜色

来自分类Dev

当应用程序完全关闭时,在推送通知水龙头上推送ViewController无效

来自分类Dev

UIAnimation完成块阻止我的TapGesture识别水龙头?

来自分类Dev

标记水龙头并不总是被识别 android

来自分类Dev

UIControl无法识别表格视图单元格内的水龙头,已从iOS 14停止工作

来自分类Dev

截取UITabBar水龙头

来自分类Dev

本机水龙头区域

来自分类Dev

可可事件水龙头

来自分类Dev

当使用水龙头关闭UIKeyboard时,如何忽略所有UIControl水龙头

来自分类Dev

如何在Apple Watch应用中识别手势?

来自分类Dev

uiimageview上无法识别点击手势

来自分类Dev

UIScreenEdgePanGestureRecognizer无法识别右边缘上的手势

来自分类Dev

ios uiimagview点击手势无法识别

来自分类Dev

uiimageview上无法识别点击手势

来自分类Dev

ios uiimagview点击手势无法识别

来自分类Dev

UIImage将无法识别轻击手势

来自分类Dev

图像视图无法识别我的点击手势

来自分类Dev

iOS WebView滑动手势识别和缩放

Related 相关文章

  1. 1

    Swift:长按手势识别器-检测水龙头和长按

  2. 2

    在同一视图上处理水龙头和捏手势

  3. 3

    可视化水龙头/手势以进行颤动测试(或颤动驱动程序)

  4. 4

    如何在启动时让Spring XD部署一组预定义的流和水龙头

  5. 5

    为什么此UITapGestureRecognizer无法识别水龙头?

  6. 6

    使用水龙头在iOS上启动应用

  7. 7

    当手势已经处于活动状态时,如何启动手势识别器?

  8. 8

    具有自定义UIView(包括按钮)的UIViewController无法识别水龙头

  9. 9

    Swift:无法识别点击手势

  10. 10

    GestureDetector无法识别手势

  11. 11

    无法识别滑动手势

  12. 12

    无法完全摆脱Android 4.1.2上的Phonegap 3.0应用中的水龙头突出显示颜色

  13. 13

    当应用程序完全关闭时,在推送通知水龙头上推送ViewController无效

  14. 14

    UIAnimation完成块阻止我的TapGesture识别水龙头?

  15. 15

    标记水龙头并不总是被识别 android

  16. 16

    UIControl无法识别表格视图单元格内的水龙头,已从iOS 14停止工作

  17. 17

    截取UITabBar水龙头

  18. 18

    本机水龙头区域

  19. 19

    可可事件水龙头

  20. 20

    当使用水龙头关闭UIKeyboard时,如何忽略所有UIControl水龙头

  21. 21

    如何在Apple Watch应用中识别手势?

  22. 22

    uiimageview上无法识别点击手势

  23. 23

    UIScreenEdgePanGestureRecognizer无法识别右边缘上的手势

  24. 24

    ios uiimagview点击手势无法识别

  25. 25

    uiimageview上无法识别点击手势

  26. 26

    ios uiimagview点击手势无法识别

  27. 27

    UIImage将无法识别轻击手势

  28. 28

    图像视图无法识别我的点击手势

  29. 29

    iOS WebView滑动手势识别和缩放

热门标签

归档