2012-04-19 6 views
1

アプリケーションにNavigationControllerにリンクされた2つのViewControllerがあります。最初のNavigationControllerには、ボタン付きのビューとラベル付きのビューがあります。このビューは円形の回転メニューで、私のホームページを表します。ビューはtouchesMoved:でCGAffineTransformMakeRotation - QuartzCore(明らかに問題を引き起こしています)で回転できます。ナビゲーションバーを非表示にすると、ボタンが移動/歪んで表示される(回転後)

私はこのビューでNavigationBarを非表示にしたかったので、私はsetNavigationBarHidden使用:YESにViewWillAppearを。次に、のバーを表示するViewWillDisappear

シミュレータでは、最初のViewControllerを回転させ、回転させてからボタンをクリックすると(2番目のViewControllerに移動)、Back(最初のViewControllerに戻る)をクリックするまで、 distorted

  1. Iは[self.viewのsetBounds:[UIScreen mainScreen]境界] を追加することによって問題を解決しようとしました。 * [self.viewのsetFrame:[UIScreen mainScreen]境界]]; * のviewDidLoad方法又はでViweWillAppear、 問題が残ります。
  2. 私はViewWillAppearに0にNavigationBarアルファを設定しようと上の1に にそれを設定しViewWillDisappearと私はYES両方 オプションは、問題を解決できなかった= self.navigationController.navigationBar.translucentを試してみました。
  3. プログラムでビュー、ボタン、およびラベルの位置を設定しようとしました。 をに設定しました。ViewWillAppearで問題を解決できません。
  4. 私はアニメーションを疑って削除しましたが、問題に影響はありません。

初心者として、この問題を解決できません。お手伝いください!

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]; 
} 
+0

最初のViewControllerから2番目のViewControllerへの変換中に、最初のビューが伸びていることがわかりました(明らかに、NavigationBarはビューを握っています)!それは絞られたままです!...どのようにこれを避けるためのアイデア?私が2番目のViewControllerに行き、最初に戻ってくるたびに、それはもっと絞られます。 –

答えて

2

ええ、私は、メインビューの自動サイズ変更が私のサブビューを絞った...問題を考え出しましたNavigationControllerが非表示になっているかどうかを示します。私はself.view.autoresizesSubviews = NOを付け加えました。 ViewDidLoadに問題が修正されました。

+0

私はこの答えにどれほど感謝していますか?これは、インタフェースビルダのAttributesインスペクタで行うこともできます。 "Autoresize Subviews"チェックボックスをオフにします。 – David

関連する問題