meetpd
meetpd

Reputation: 9219

How to achieve this in iOS?

I am referring to DMD Panorama app.

As you can see there is a Yin-yang symbol at the top section of this image.

enter image description here

Once we rotate our device, the two symbols come closer, like below:

enter image description here

Can you please let me know how do I detect rotation of the device so that when device is rotated, these two images come closer?

I appreciate your response.

Upvotes: 0

Views: 174

Answers (3)

Purva
Purva

Reputation: 1291

Try doing the following when the application loads or when your view loads:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter]
   addObserver:self selector:@selector(orientationChanged:)
   name:UIDeviceOrientationDidChangeNotification
   object:[UIDevice currentDevice]];

Then add the following method:

- (void) orientationChanged:(NSNotification *)note
{
   UIDevice * device = note.object;
   switch(device.orientation)
   {
       case UIDeviceOrientationPortrait:
       /* set frames for images */
       break;

       case UIDeviceOrientationPortraitUpsideDown:
       /* set frames for images */
       break;

       default:
       break;
   };
}

The above will allow you to register for orientation changes of the device without enabling the autorotate of your view.

Upvotes: 0

Amitabha
Amitabha

Reputation: 1662

first you register for notification

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(detectDeviceOrientation) name:UIDeviceOrientationDidChangeNotification object:nil];

then add this method

-(void) detectDeviceOrientation 
{
    if (([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeLeft) || 
    ([[UIDevice currentDevice] orientation] == UIDeviceOrientationLandscapeRight)) 
    {
        // Landscape mode
    } else if ([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait)
    {
       // portrait mode
    }   
}

Upvotes: 1

Vivek Sehrawat
Vivek Sehrawat

Reputation: 6570

Add a notifier in the viewWillAppear function

-(void)viewWillAppear:(BOOL)animated{
[[NSNotificationCenter defaultCenter] addObserver:self  selector:@selector(orientationChanged:)  name:UIDeviceOrientationDidChangeNotification  object:nil];}

The orientation change notifies this function

- (void)orientationChanged:(NSNotification *)notification{
[self adjustViewsForOrientation:[[UIApplication sharedApplication] statusBarOrientation]];}

which in-turn calls this function where the moviePlayerController frame is orientation is handled

- (void) adjustViewsForOrientation:(UIInterfaceOrientation) orientation {

if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) 
{ 
    //load the portrait view    
}
else if (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight) 
{
    //load the landscape view 
}}

in viewDidDisappear remove the notification

-(void)viewDidDisappear:(BOOL)animated{
[[NSNotificationCenter defaultCenter]removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];}

Upvotes: 5

Related Questions