/ Published in: Objective C
this was just an exercise to learn about updating a UIImageView to the desired orientation;the accelerometer was used to detect the movements through the overridden method shouldAutorotateToInterfaceOrientation. wurd.
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
// 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