2012-07-16 80 views
0

我試圖在iPad上製作一個簡單的應用程序。目前,我只能在自定義視圖中顯示全屏圖片。我的問題是,當iPad旋轉時,我的視圖不會自動調整...旋轉完美,但是圖像的大小仍然相同。我的子視圖在旋轉後未自動調整

我的應用程序基於this,因爲我在切換圖片時需要此效果。基本上,產生效果的視圖是FlipView,其繼承形式GenericAnimationView,其形式爲UIView。還有AnimationFrameNSObject繼承,需要顯示1個動畫循環。最後,有AnimationDelegate繼承自NSObject,它處理來自變換操作的回調。

這裏是我的AnimationViewController

#import "AnimationViewController.h" 
    #import "FlipView.h" 
    #import "AnimationDelegate.h" 

    @implementation AnimationViewController 

    @synthesize flipView2; 
    @synthesize panRecognizer; 
    @synthesize panRegion; 
    @synthesize imageBluehound,imageDoggie,imagePointy,imagePurpGuy,imageRedDog,imageWoof; 

    - (id)init 
    { 
     self = [super init]; 
     if (self) { 
      // Custom initialization 
      step = 0; 
     } 
     return self; 
    } 

    - (void)didReceiveMemoryWarning 
    { 
     // Releases the view if it doesn't have a superview. 
     [super didReceiveMemoryWarning]; 

     // Release any cached data, images, etc that aren't in use. 
    } 

    #pragma mark - View lifecycle 

    /* 
    // Implement loadView to create a view hierarchy programmatically, without using a nib. 
    - (void)loadView 
    { 
    } 
    */ 

    - (void)dealloc 
    { 
     [flipView2 release]; 
     [panRecognizer release]; 
     [panRegion release]; 

     [super dealloc]; 
    } 

    - (void)viewDidLoad 
    { 
     [super viewDidLoad]; 

     self.view.backgroundColor = [UIColor whiteColor]; 

     self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(onBackButtonPressed:)]; 

     // memorisation des imagesx 
     imageBluehound = [UIImage imageNamed:@"Bluehound.gif"]; 
     imageDoggie = [UIImage imageNamed:@"Doggie.gif"]; 
     imagePointy = [UIImage imageNamed:@"Pointy.gif"]; 
     imagePurpGuy = [UIImage imageNamed:@"PurpGuy.gif"]; 
     imageRedDog = [UIImage imageNamed:@"RedDog.gif"]; 
     imageWoof = [UIImage imageNamed:@"Woof.gif"]; 


     animationDelegate2 = [[AnimationDelegate alloc] initWithSequenceType:kSequenceControlled 
                   directionType:kDirectionForward]; 
     animationDelegate2.controller = self; 
     animationDelegate2.perspectiveDepth = 1000; 

     self.flipView2 = [[FlipView alloc] initWithAnimationType:kAnimationFlipHorizontal 
                  frame:CGRectMake(0, 0,[UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)]; 
     animationDelegate2.transformView = flipView2; 

     [self.view addSubview:flipView2]; 


     [flipView2 printText:@"" usingImage:imageBluehound backgroundColor:[UIColor greenColor] textColor:nil]; 
     [flipView2 printText:@"" usingImage:imageDoggie backgroundColor:[UIColor greenColor] textColor:nil]; 
     [flipView2 printText:@"" usingImage:imagePointy backgroundColor:[UIColor greenColor] textColor:nil]; 
     [flipView2 printText:@"" usingImage:imagePurpGuy backgroundColor:[UIColor greenColor] textColor:nil]; 
     [flipView2 printText:@"" usingImage:imageRedDog backgroundColor:[UIColor greenColor] textColor:nil]; 
     [flipView2 printText:@"" usingImage:imageWoof backgroundColor:[UIColor greenColor] textColor:nil]; 


     self.panRegion = [[UIView alloc] initWithFrame:CGRectMake(0, 0,[UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)]; 
     [self.view addSubview:panRegion]; 

     self.panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panned:)]; 
     panRecognizer.delegate = self; 
     panRecognizer.maximumNumberOfTouches = 1; 
     panRecognizer.minimumNumberOfTouches = 1; 
     [self.view addGestureRecognizer:panRecognizer]; 

    } 

    - (void)onBackButtonPressed:(UIBarButtonItem *)sender 
    { 
     [self dismissModalViewControllerAnimated:YES]; 
    } 

    - (void)panned:(UIPanGestureRecognizer *)recognizer 
    { 
     switch (recognizer.state) { 
      case UIGestureRecognizerStatePossible: 
       break; 
    //  case UIGestureRecognizerStateRecognized: // for discrete recognizers 
    //   break; 
      case UIGestureRecognizerStateFailed: // cannot recognize for multi touch sequence 
       break; 
      case UIGestureRecognizerStateBegan: { 
       // allow controlled flip only when touch begins within the pan region 
       if (CGRectContainsPoint(panRegion.frame, [recognizer locationInView:self.view])) { 
        if (animationDelegate2.animationState == 0) { 
         [NSObject cancelPreviousPerformRequestsWithTarget:self]; 
         animationDelegate2.sequenceType = kSequenceControlled; 
         animationDelegate2.animationLock = YES; 
        } 
       } 
      } 
       break; 
      case UIGestureRecognizerStateChanged: { 
       if (animationDelegate2.animationLock) { 
        switch (flipView2.animationType) { 
         case kAnimationFlipVertical: { 
          float value = [recognizer translationInView:self.view].y; 
          [animationDelegate2 setTransformValue:value delegating:NO]; 
         } 
          break; 
         case kAnimationFlipHorizontal: { 
          float value = [recognizer translationInView:self.view].x; 
          [animationDelegate2 setTransformValue:value delegating:NO]; 
         } 
          break; 
         default:break; 
        } 
       } 
      } 
       break; 
      case UIGestureRecognizerStateCancelled: // cancellation touch 
       break; 
      case UIGestureRecognizerStateEnded: { 
       if (animationDelegate2.animationLock) { 
        // provide inertia to panning gesture 
        float value = sqrtf(fabsf([recognizer velocityInView:self.view].x))/10.0f; 
        [animationDelegate2 endStateWithSpeed:value]; 
       } 
      } 
       break; 
      default: 
       break; 
     } 
    } 

    // use this to trigger events after specific interactions 
    - (void)animationDidFinish:(int)direction 
    { 
     switch (step) { 
      case 0: 
       break; 
      case 1: 
       break; 
      default:break; 
     } 
    } 

    - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration 
    { 
     if (UIInterfaceOrientationIsLandscape(orientation)) 
     { 
      if (orientation == UIInterfaceOrientationLandscapeLeft) 
      { 
       NSLog(@"landscape left"); 
       self.flipView2.transform = CGAffineTransformMakeRotation(0); 
      } 
      else 
      { 
       NSLog(@"landscape right"); 
       self.flipView2.transform = CGAffineTransformMakeRotation(0); 
      } 
     } 
    } 


    - (void)viewDidUnload 
    { 
     [super viewDidUnload]; 
     // Release any retained subviews of the main view. 
     // e.g. self.myOutlet = nil; 
    } 

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
    { 
     // Return YES for supported orientations 
     return YES; 
    } 

@end 

而這裏.H

#import <UIKit/UIKit.h> 

@class FlipView; 
@class AnimationDelegate; 

@interface AnimationViewController : UIViewController <UIGestureRecognizerDelegate> { 

    // use this to choreograph a sequence of animations that you want the user to step through 
    int step; 

    //the controller needs a reference to the delegate for control of the animation sequence 
    AnimationDelegate *animationDelegate2; 

    BOOL runWhenRestart; 

} 

//@property (nonatomic, retain) UIButton *boutonMenuGlissant; 

@property (nonatomic, retain) UIImage *imageBluehound; 
@property (nonatomic, retain) UIImage *imageDoggie; 
@property (nonatomic, retain) UIImage *imagePointy; 
@property (nonatomic, retain) UIImage *imagePurpGuy; 
@property (nonatomic, retain) UIImage *imageRedDog; 
@property (nonatomic, retain) UIImage *imageWoof; 

@property (nonatomic, retain) FlipView *flipView2; 
@property (nonatomic, retain) UIView *panRegion; 
@property (nonatomic, retain) UIPanGestureRecognizer *panRecognizer; 

- (void)onBackButtonPressed:(UIBarButtonItem *)sender; 
- (void)panned:(UIPanGestureRecognizer *)recognizer; 
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration; 

// animation delegate will notify the controller when the animation frame has reached a position of rest 
- (void)animationDidFinish:(int)direction; 

@end 

我,他們談到了自動調整大小面具,但我不能讓其他職位看到...

任何想法或建議?謝謝!

回答

1

嘗試修改視圖/圖像的支柱和字符串。點擊圖片後,轉到實用檢查器的大小選項卡。 「autosizing」旁邊的示例將顯示視圖在框架更改時的樣子。打開/關閉紅色連接器和箭頭,使圖像在方向更改時以您想要的方式顯示。

+0

我不明白...我在哪裏做的?我沒有'.storyboard' – castors33 2012-07-17 13:32:19

+0

點擊你想在你的xib文件中修改的圖像視圖。然後按下Command-Option-5。這將帶來尺寸檢查員。在顯示「Autosizing」的框中,您可以切換紅色箭頭和連接器以更改旋轉設備時視圖的大小調整方式。還要確保屬性檢查器(Command-Option-4)中的「模式」設置爲「Scale to Fill」(圖像縮放),以便您的圖像 – 2012-07-17 15:33:56

+0

我沒有尺寸檢查器這樣的東西...我想它需要有一個'.storyboard' – castors33 2012-07-17 15:51:55