- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toOrientation
duration:(NSTimeInterval)duration {
if (toOrientation == UIInterfaceOrientationLandscapeLeft ||
toOrientation == UIInterfaceOrientationLandscapeRight) {
[UIView beginAnimations:nil context:NULL]; {
[UIView setAnimationDuration:1.0];
}
[UIView setAnimationDelegate:self];
[viewA setFrame:CGRectMake(?,?,?,?)];
[viewB setFrame:CGRectMake(?,?,?,?)];
[viewC setFrame:CGRectMake(?,?,?,?)];
} [UIView commitAnimations];
} else if (toOrientation == UIInterfaceOrientationPortrait ||
toOrientation == UIInterfaceOrientationPortraitUpsideDown) {
[UIView beginAnimations:nil context:NULL]; {
[UIView setAnimationDuration:1.0];
}
[UIView setAnimationDelegate:self];
[viewA setFrame:CGRectMake(?,?,?,?)];
[viewB setFrame:CGRectMake(?,?,?,?)];
[viewC setFrame:CGRectMake(?,?,?,?)];
} [UIView commitAnimations];
}
duration:(NSTimeInterval)duration {
if (toOrientation == UIInterfaceOrientationLandscapeLeft ||
toOrientation == UIInterfaceOrientationLandscapeRight) {
[UIView beginAnimations:nil context:NULL]; {
[UIView setAnimationDuration:1.0];
}
[UIView setAnimationDelegate:self];
[viewA setFrame:CGRectMake(?,?,?,?)];
[viewB setFrame:CGRectMake(?,?,?,?)];
[viewC setFrame:CGRectMake(?,?,?,?)];
} [UIView commitAnimations];
} else if (toOrientation == UIInterfaceOrientationPortrait ||
toOrientation == UIInterfaceOrientationPortraitUpsideDown) {
[UIView beginAnimations:nil context:NULL]; {
[UIView setAnimationDuration:1.0];
}
[UIView setAnimationDelegate:self];
[viewA setFrame:CGRectMake(?,?,?,?)];
[viewB setFrame:CGRectMake(?,?,?,?)];
[viewC setFrame:CGRectMake(?,?,?,?)];
} [UIView commitAnimations];
}
// Source @ http://www.jailbyte.ca/safari/files/SpinView.zip
//
// UntitledViewController.h
// SpinView
//
// Created by Richard Vacheresse on 10-05-20.
// Copyfright jailByte.ca 2010. Use it anyway you like.
//
#import <UIKit/UIKit.h>
@interface UntitledViewController : UIViewController
{
//-view (the image) used for manipulation by the accelerometer
UIImageView *imageView;
}
@property (nonatomic, retain) UIImageView *imageView;
- (IBAction) actionBtnOne;
@end
---------------------------------------------------------------------------
//
// UntitledViewController.m
//
// SpinView - this is an example of how to deal with the rotation of views via the accelerometer and the
// overridden method shouldAutorotateToInterfaceOrientation. this example uses an image view as the view
// that is being rotated; this imageview is created with the press of a button, the resulting action is to
// simply show the layer in the view. from there you start to spin the device and the updates follow. to reset
// the view you must press the home key and then restart the app; sorry, just too lazy to add anymore.
//
// **note: there is a bug to this solution, and it becomes apparent when using the device and the user rotates
// the phone quickly 180 degrees. i believe it may have something to do with when the floats that are used
// to hold the x and y values are updated while rotating; like it grabs the coordinates while spinnning past 90
// degrees. the next time you rotate the view, the view will correct itself.
//
// Created by Richard Vacheresse on 10-05-20.
// Copyfright jailByte.ca 2010. Use it anyway you like.
//
#import "UntitledViewController.h"
@implementation UntitledViewController
@synthesize imageView;
- (void)viewDidLoad
{
[super viewDidLoad];
//-create a button
UIButton *btnOne = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[btnOne setTitle: @"btnOne" forState: UIControlStateNormal];
[btnOne setFrame:CGRectMake(0.0f, 0.0f, 105.0f, 55.0f)];
[btnOne setCenter:CGPointMake(160.0f, 55.0f)];
[btnOne addTarget:self action:@selector(actionBtnOne) forControlEvents:UIControlEventTouchUpInside];
//-add it to the display
[self.view addSubview: btnOne];
}
//
// actionBtnOne - initializes a UIImageView, sets the initial properties, add it to the display, then releases it.
//
- (IBAction) actionBtnOne
{
imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 480.0f)];
[imageView setImage:[UIImage imageNamed:@"image.png"]];
[imageView setAutoresizesSubviews: YES];
[self.view addSubview:imageView];
[imageView release];
}
//
// shouldAutorotateToInterfaceOrientation - used to interact with the accelerometer; this is an overriden method.
//
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if ( interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight)
{
//-set the center of the image from the dimensions of the display
//-x value is +10 due to status bar
[UIView beginAnimations: nil context: NULL];
[UIView setAnimationDuration: 0.25];
CGFloat x = self.view.bounds.size.height / 2 + 10;
CGFloat y = self.view.bounds.size.width / 2;
CGPoint center = CGPointMake( x, y);
[imageView setCenter: center];
[UIView commitAnimations];
[UIView beginAnimations: nil context: NULL];
[UIView setAnimationDuration: 0.25];
//-this will keep it in the same position - always standing up
//CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI / 0.5);
//this will keep it standing up as in portrait however it will turn it upsidedown
//CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI / 1.0);
//this will change the view to be upside-down but in proper alignment with the landscape mode
//CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI / 2.0);
//this will change the view to be rightside-up in proper alignment with landscape mode
CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI / -2.0);
imageView.transform = transform;
[UIView commitAnimations];
}
else
{
//-set the center of the image from the dimensions of the display
//-x value is +10 due to status bar
[UIView beginAnimations: nil context: NULL];
[UIView setAnimationDuration: 0.25];
CGFloat x = self.view.bounds.size.height / 2 + 10;
CGFloat y = self.view.bounds.size.width / 2;
CGPoint center = CGPointMake( x, y);
[imageView setCenter: center];
[UIView commitAnimations];
[UIView beginAnimations: nil context: NULL];
[UIView setAnimationDuration: 0.25];
CGAffineTransform move = CGAffineTransformMakeTranslation(0.0f, 0.0f);
imageView.transform = move;
CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI * 2);
imageView.transform = transform;
[UIView commitAnimations];
}
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait ||
interfaceOrientation == UIInterfaceOrientationLandscapeRight ||
interfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown);
}
- (void)dealloc
{
[imageView release];
[super dealloc];
}
//-the
@end