1

私のアプリケーションには、NavigationControllerにリンクされた2つのViewControllerがあります。First NavigationControllerには、ボタン付きのビューとラベル付きのビューが1つずつあります。このビューは循環回転メニューであり、私のホームページを表しています。touchsMoved:でCGAffineTransformMakeRotation-QuartzCore(明らかに問題の原因)を使用してビューを回転させることができます。

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

シミュレーターでは、最初のViewControllerを回転させるまで、すべてが期待どおりに機能します。回転してから任意のボタンをクリックして(2番目のViewControllerに移動)、[戻る]をクリックすると(最初のViewControllerに戻る)、すべてが歪んでしまいます。

  1. [self.view setBounds:[[UIScreen mainScreen] bounds]];を追加して、この問題を修正しようとしました。* [self.view setFrame:[[UIScreen mainScreen] bounds]]; * ViewDidLoadメソッドまたはViweWillAppearでは、問題が残ります。
  2. ViewWillAppearでNavigationBaralphaを0に設定し、 ViewWillDisappearで1に設定しようとしましたが、 self.navigationController.navigationBar.translucent =YESを試しました。どちらのオプションでも問題は解決しませんでした。
  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];
 }
4

1 に答える 1

2

ええ、私は問題を理解しました... メイン ビューの自動サイズ変更は、NavigationController が非表示になっているかどうかにかかわらず、サブビューを圧迫していました。だから私は self.view.autoresizedSubviews = NO; を追加しました。ViewDidLoad に追加すると、問題が修正されます。

于 2012-04-20T09:14:36.687 に答える