隐藏导航栏时旋转/扭曲的按钮(旋转后)

时间:2012-04-19 11:26:27

标签: ios5 rotation uinavigationbar quartz-core

我的应用程序有两个与NavigationController链接的ViewControllers。 First NavigationController有一个带按钮的视图和一个带标签的视图。此视图是一个圆形旋转菜单,它代表我的主页。视图可以使用CGAffineTransformMakeRotation旋转 - QuartzCore(显然它导致问题)在touchesMoved上:。

我只想在此视图中隐藏NavigationBar,因此我在 ViewWillAppear 上使用了 setNavigationBarHidden:YES 。然后在 ViewWillDisappear 上显示该栏。

在模拟器上,一切都按预期工作,直到我旋转第一个ViewController,当我旋转然后点击任何按钮(转到第二个ViewController)然后点击Back(回到我的第一个ViewController),一切都将是distorted

  1. 我尝试通过添加 [self.view setBounds:[[UIScreen mainScreen] bounds]]; * [self.view setFrame:[[UIScreen mainScreen] bounds]]; *在 ViewDidLoad 方法或 ViweWillAppear 中, 问题仍然存在。
  2. 我尝试在 ViewWillAppear 中将NavigationBar alpha设置为0并进行设置     它在 ViewWillDisappear 上为1,我试过了     self.navigationController.navigationBar.translucent = YES两者     选项无法解决问题。
  3. 我尝试以编程方式设置视图,按钮和标签位置     在 ViewWillAppear 中,它无法解决问题。
  4. 我怀疑动画,所以我删除了它,但它对问题没有任何影响。
  5. 作为初学者,我无法解决此问题,请帮忙!

    ViewController.h (第一个ViewController)

    #import <UIKit/UIKit.h>
    #import <QuartzCore/QuartzCore.h>
    
    @interface ViewController : UIViewController
    
    @property (nonatomic, strong) IBOutlet UIView *aView;
    @property (nonatomic, strong) IBOutlet UIView *bView;
    
    @property (nonatomic, strong) IBOutlet UIButton *bimg1;
    …
    @property (strong, nonatomic) IBOutlet UILabel *label1;
    …
    -(void) rotateTo:(CGFloat)x andY:(CGFloat)y;
    
    @end
    

    ViewController.m

    #import "ViewController.h"
    
    @implementation ViewController
    @synthesize aView = _aView;
    …
    @synthesize bimg1 = _bimg1;
    …
    @synthesize label1 = _label1;
    …
    
    static inline double toradians (double degrees) {
    return degrees * M_PI/180;
    }
    
    -(void)viewDidLoad {
        ![enter image description here][1][super viewDidLoad];
        //Set text font
        [_label1 setFont:[UIFont fontWithName:@"Consolas" size:16]];
    …
        [self.view setBounds:[[UIScreen mainScreen]bounds]];
        [self.view setFrame:[[UIScreen mainScreen]bounds]];
    }
    
    -(void)viewWillAppear:(BOOL)animated {
        self.navigationController.navigationBar.hidden = YES;
        printf("Aview x: %f     | Aview y: %f \n",self.aView.frame.origin.x, self.aView.frame.origin.y);
        printf("Aview width: %f | Aview height: %f \n",self.aView.frame.size.width,    self.aView.frame.size.height);
    }
    
    -(void)viewWillDisappear:(BOOL)animated {
        self.navigationController.navigationBar.hidden = NO;
    }
    
    -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
        UITouch *touch = [touches anyObject];
        CGPoint LastTouchPoint = [touch locationInView:self.view];
        CGFloat LasTouchx = LastTouchPoint.x;
        CGFloat LasTouchy = LastTouchPoint.y;
    
        CGPoint CenterPoint = self.view.center;
        CGFloat x = LasTouchx - CenterPoint.x;
        [self rotateTo:x andY:y];
    }
    
    -(void) rotateTo:(CGFloat)x andY:(CGFloat)y {
        CGFloat angle = x/y;
        angle = atan(angle);
        angle = angle * 360/M_PI;
        angle *= 0.0174532925;
    
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDelegate:self];
        [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
        [UIView setAnimationDuration:1];
        self.aView.transform=CGAffineTransformMakeRotation(-angle); 
        self.bView.transform=CGAffineTransformMakeRotation(-angle); 
    
        self.bimg1.transform=CGAffineTransformMakeRotation(angle);
        self.bimg2.transform=CGAffineTransformMakeRotation(angle);
        self.bimg3.transform=CGAffineTransformMakeRotation(angle);
        self.bimg4.transform=CGAffineTransformMakeRotation(angle);
    
        self.label1.transform=CGAffineTransformMakeRotation(angle);
        self.label2.transform=CGAffineTransformMakeRotation(angle);
        self.label3.transform=CGAffineTransformMakeRotation(angle);
        self.label4.transform=CGAffineTransformMakeRotation(angle);
        [UIView commitAnimations];
    }
    
    - (void)viewDidUnload
    {
        [self setBimg1:nil];
        … 
        [self setAView:nil];
        [self setBView:nil];
        [super viewDidUnload];
     }
    

1 个答案:

答案 0 :(得分:2)

是的,我发现了问题......当ViewController被隐藏或未被隐藏时,主视图的自动调整会挤压我的子视图。所以我添加了self.view.autoresizesSubviews = NO;到ViewDidLoad并解决了问题。