2012-07-16 71 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