iphone - Is there a way to determine device orientation if view is loaded before [window makeKeyAndVisible] is called? -


view of uiviewcontroller loaded nib before [window makekeyandvisible] called in application:didfinishlaunchingwithoptions: cannot correct device orientation - i.e. self.interfaceorientation, [[uiapplication sharedapplication] statusbarorientation] , [[uidevice currentdevice] orientation] give me false orientation info i'm in portrait mode (ipad's default mode, think).

is there way work around problem? please don't need use accelerometer ;)

edit: interested on getting orientation info based on accelerometer reading: http://web.archive.org/web/20091111033649/http://blog.sallarp.com/iphone-accelerometer-device-orientation

it appears can't rely on [uidevice currentdevice].orientation until orientation changes first time. if so, hack getting raw accelerometer readings.

#define kupdatefrequency 30  // hz #define kupdatecount 15 // init after half second #define kfilteringfactor (1.0f / kupdatecount)  - (void)applicationdidfinishlaunching:(uiapplication *)app {     [uiaccelerometer sharedaccelerometer].updateinterval = (1.0 / kupdatefrequency);     [uiaccelerometer sharedaccelerometer].delegate = self;     accelerometercounter = 0;     ... }  - (void)accelerometer:(uiaccelerometer *)accelerometer didaccelerate:(uiacceleration *)accel {     // average out first kupdatecount readings     // acceleration_[xyz] ivars typed float     acceleration_x = (float)accel.x * kfilteringfactor + acceleration_x * (1.0f - kfilteringfactor);     acceleration_y = (float)accel.y * kfilteringfactor + acceleration_y * (1.0f - kfilteringfactor);     acceleration_z = (float)accel.z * kfilteringfactor + acceleration_z * (1.0f - kfilteringfactor);      accelerometercounter++;     if (accelerometercounter == kupdatecount)     {         [self initorientation];         [uiaccelerometer sharedaccelerometer].delegate = nil;     } }  - (void)initorientation {     // figure out orientation acceleration_[xyz] , set ui... } 

original response:

does [uidevice currentdevice].orientation return correct orientation during applicationdidfinishlaunching:? if so, can set initial ui according orientation.

if property doesn't set until later time, might try experimenting performselector:afterdelay: initialize ui after small delay.

this code sample kendall's answer below, added here completeness:

[self performselector:@selector(getoriented) withobject:nil afterdelay:0.0f]; 

i'm not sure if zero-second delay sufficient -- means code getoriented run during first pass through event run loop. may need wait longer accelerometer readings register on uidevice.


Comments

Popular posts from this blog

c# - SharpSVN - How to get the previous revision? -

c++ - Is it possible to compile a VST on linux? -

url - Querystring manipulation of email Address in PHP -