在自动旋转设置框架后,UIButton不会响应触摸 [英] UIButtons don't respond to touch after set frame on autorotate

查看:36
本文介绍了在自动旋转设置框架后,UIButton不会响应触摸的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好,在我的应用程序中,我将一些uiButtons作为子视图添加到了下图所示的视图中.替代文字http://img99.imageshack.us/img99/5244/portraitc.png

Hello in my app i have some uiButtons added as subviews to a view like in the picture below. alt text http://img99.imageshack.us/img99/5244/portraitc.png

当用户横向旋转手机时,视图和按钮必须将位置更改为此:替代文本http://img193.imageshack.us/img193/5931/landscapeq.png

when the user rotates the phone in landscape the views and buttons must change position to this: alt text http://img193.imageshack.us/img193/5931/landscapeq.png

最初,当视图处于纵向模式时,按钮会响应触摸.如果我倾斜手机,则按钮会移动,一切看起来都不错,如第二幅图像所示,并且按钮会响应触摸.如果我将手机倾斜回纵向模式,则按钮向后移动,看​​起来不错,但对触摸没有响应.如果我改回横向,按钮会起作用...

initially when the view is in portrait mode the buttons respond to touches. If i tilt the phone the buttons move, everything looks ok like in the second image and the buttons respond to touches. If i tilt the phone back to portrait mode, the buttons move back they look ok but they don't respond to touches. If i change back to landscape the buttons work...

我的按钮是这样创建的:

my buttons are created like this:

nextNewsP = [[UIButton alloc] initWithFrame:CGRectMake([[UIScreen mainScreen] bounds].size.width - 40, 10, 25, 25)];
[nextNewsP setImage:[UIImage newImageFromResource:@"next_arrow.png"] forState:UIControlStateNormal];
[nextNewsP addTarget:self action:@selector(nextNewsAction:) forControlEvents:UIControlEventTouchUpInside];
[nextNewsP setShowsTouchWhenHighlighted:TRUE];
[bottomTools addSubview:nextNewsP];
[nextNewsP release];

previousNewsP = [[UIButton alloc] initWithFrame:CGRectMake([[UIScreen mainScreen] bounds].size.width - 85, 10, 25, 25)];
[previousNewsP setImage:[UIImage newImageFromResource:@"previous_arrow.png"] forState:UIControlStateNormal];
[previousNewsP addTarget:self action:@selector(previousNewsAction:) forControlEvents:UIControlEventTouchUpInside];
[previousNewsP setShowsTouchWhenHighlighted:TRUE];
[bottomTools addSubview:previousNewsP];
[previousNewsP release];

bottomTools是一个视图,并且也添加为子视图,如下所示:

bottomTools is a view and is added also as a subview like this:

[self.view addSubview:bottomTools];
[bottomTools release];

和我的shouldAutorotateToInterfaceOrientation函数看起来像这样:

and my shouldAutorotateToInterfaceOrientation function looks like this:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {


    [UIView beginAnimations:@"moveViews" context: nil];


    if(interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
    {
        NSLog(@"set frames for portrait");
        closeView.frame = CGRectMake([[UIScreen mainScreen] bounds].size.width - 30, 2, 23, 25);
        newsInfo.frame = CGRectMake(10, 10, [[UIScreen mainScreen] bounds].size.width - 10, 22);
        internetActivityIndicator.frame = CGRectMake([[UIScreen mainScreen] bounds].size.width - 55, 5, 18, 18);
        industryLabel.frame = CGRectMake([[UIScreen mainScreen] bounds].size.width/2.0 - [industryTitle sizeWithFont:[UIFont systemFontOfSize:14]].width/2, 3, [industryTitle sizeWithFont:[UIFont systemFontOfSize:14]].width, 22);
        bottomTools.frame = CGRectMake(0, [[UIScreen mainScreen] bounds].size.height-40, [[UIScreen mainScreen] bounds].size.width, 40);
        nextNewsP.frame = CGRectMake([[UIScreen mainScreen] bounds].size.width - 40, 10, 25, 25);
        previousNewsP.frame = CGRectMake([[UIScreen mainScreen] bounds].size.width - 85, 10, 25, 25);
    }
    else
    {
        NSLog(@"set frames for landscape");
        closeView.frame = CGRectMake([[UIScreen mainScreen] bounds].size.height - 30, 2, 23, 25);
        newsInfo.frame = CGRectMake(10, 10, [[UIScreen mainScreen] bounds].size.height - 10, 22);
        internetActivityIndicator.frame = CGRectMake([[UIScreen mainScreen] bounds].size.height - 55, 5, 18, 18);
        industryLabel.frame = CGRectMake([[UIScreen mainScreen] bounds].size.height/2.0 - [industryTitle sizeWithFont:[UIFont systemFontOfSize:14]].width/2, 3, [industryTitle sizeWithFont:[UIFont systemFontOfSize:14]].width, 22);
        bottomTools.frame = CGRectMake(0, [[UIScreen mainScreen] bounds].size.width-40, [[UIScreen mainScreen] bounds].size.height, 40);
        nextNewsP.frame = CGRectMake([[UIScreen mainScreen] bounds].size.height - 40, 10, 25, 25);
        previousNewsP.frame = CGRectMake([[UIScreen mainScreen] bounds].size.height - 85, 10, 25, 25);
    }

    [UIView commitAnimations];

return YES;

}

您曾经遇到过类似的问题吗?先感谢您,索林

did you ever had a similar problem? thank you in advance, Sorin

推荐答案

我认为您的问题出在帧调整上.我的直觉告诉我,它与 shouldAutorotateToInterfaceOrientation 内部的逻辑有关,因为这是在实际完成旋转之前发生的.在本文中尝试用数学的方式进行计算,看看是否有帮助.

I think your problem is in your frame adjustment. My gut tells me it has something to do with the logic being inside shouldAutorotateToInterfaceOrientation because that happens before the rotation is actually done. Try doing your math the way they do it in this article and see if that helps.

这篇关于在自动旋转设置框架后,UIButton不会响应触摸的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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