我的子视图在旋转后未自动调整
问题描述:
我试图在iPad上制作一个简单的应用程序。目前,我只能在自定义视图中显示全屏图片。我的问题是,当iPad旋转时,我的视图不会自动调整...旋转完美,但是图像的大小仍然相同。我的子视图在旋转后未自动调整
我的应用程序基于this,因为我在切换图片时需要此效果。基本上,产生效果的视图是FlipView
,其继承形式GenericAnimationView
,其形式为UIView
。还有AnimationFrame
从NSObject
继承,需要显示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
我,他们谈到了自动调整大小面具,但我不能让其他职位看到...
任何想法或建议?谢谢!
答
尝试修改视图/图像的支柱和字符串。点击图片后,转到实用检查器的大小选项卡。 “autosizing”旁边的示例将显示视图在框架更改时的样子。打开/关闭红色连接器和箭头,使图像在方向更改时以您想要的方式显示。
我不明白...我在哪里做的?我没有'.storyboard' – castors33 2012-07-17 13:32:19
点击你想在你的xib文件中修改的图像视图。然后按下Command-Option-5。这将带来尺寸检查员。在显示“Autosizing”的框中,您可以切换红色箭头和连接器以更改旋转设备时视图的大小调整方式。还要确保属性检查器(Command-Option-4)中的“模式”设置为“Scale to Fill”(图像缩放),以便您的图像 – 2012-07-17 15:33:56
我没有尺寸检查器这样的东西...我想它需要有一个'.storyboard' – castors33 2012-07-17 15:51:55