2013-08-26 72 views
5

Tôi đang triển khai khóa xoay có lập trình trong ứng dụng tương tự như ứng dụng Kindle trong ứng dụng Kindle của Amazon: khi thiết bị được xoay, nút khóa hiển thị; nhấn nút và hướng được khóa theo hướng mà giao diện ở trong khi nhấn nút.Force iOS ViewController xoay theo hướng thiết bị sau khi mở khóa xoay có lập trình

Sau khi mở khóa, tôi muốn xoay giao diện theo hướng thiết bị hiện tại. Giả sử bạn xoay vòng theo chiều dọc, xoay thiết bị sang bên trái, sau đó mở khóa; Tôi muốn giao diện sau đó xoay sang bên trái. Đây là phương pháp để bật khóa:

- (IBAction)toggleRotationLock:(UIButton *)sender { 
BOOL rotationLocked = [_defaults boolForKey:@"RotationLocked"]; 
if (rotationLocked) { //unlock rotation 
    [_defaults setBool:NO forKey:@"RotationLocked"]; 
    /* force rotation to current device orientation here? 
    * ... 
    */ 
} else { //lock rotation to current orientation 
    [_defaults setBool:YES forKey:@"RotationLocked"]; 
    [_defaults setInteger:self.interfaceOrientation forKey:@"RotationOrientation"]; 
} 
    [_defaults synchronize]; 
    [self setupRotationLockButton]; 
} 

Bất kỳ cách nào để thực hiện việc này?

Trả lời

2

Điều quan trọng là 1) lưu hướng hiện tại thành mặc định của người dùng giống như bạn đang làm 2) tất cả phần còn lại của những gì bạn cần làm là trong các phương pháp được ghi đè của bộ điều khiển chế độ xem mà bạn muốn khóa (đối với ios 6+ , supportedInterfaceOrientations). Sử dụng các giá trị mặc định của người dùng đã lưu của bạn để trả lại định hướng bạn cho phép dựa trên liệu nó có bị khóa hay không.

Sau đó, gọi attemptRotationToDeviceOrientation Để yêu cầu bộ điều khiển chế độ xem của bạn gọi lại phương thức của họ và đánh giá lại vòng quay nào họ sẽ có trong xoay vòng thiết bị hiện tại.

+0

Xin cảm ơn, tryRotationĐể làm việc! – dysfunction

0

Đây là cách tôi làm cho nó hoạt động, chỉ trong trường hợp nếu có ai đến đây muốn xem mã. :)

-(IBAction)lockOrientation:(UIButton*)sender 
{ 
if (orientationLocked) { //Unlock it, "orientationLocked" is a boolean defined in .h 
    orientationLocked = NO; 
    [sender setTitle:@"Unlocked" forState:UIControlStateNormal]; 
} 
else 
{ // Lock it. 

    //Save the orientation value to NSDefaults, can just be int if you prefer. 
    // "defaults" is a NSUserDefaults also defined in .h 

    [defaults setInteger:[[UIApplication sharedApplication] statusBarOrientation] forKey:@"orientation"]; 
    orientationLocked = YES; 
    [sender setTitle:@"Locked" forState:UIControlStateNormal]; 
} 
} 

- (NSUInteger)supportedInterfaceOrientations{ 
if (orientationLocked) { 

    return = [defaults integerForKey:@"orientation"]; 
} 
return UIInterfaceOrientationMaskAllButUpsideDown; 
} 
+0

Đó không chính xác là câu hỏi tôi đã hỏi - Tôi đã không hỏi làm thế nào để thực hiện khóa xoay, mà tôi đã làm, tôi đã hỏi làm thế nào để xoay hướng thiết bị khi khóa xoay đã được mở khóa. Dường như atomk cũng nghĩ rằng tôi hỏi làm thế nào để làm toàn bộ điều, nhưng ông đã trả lời câu hỏi thực tế của tôi - phương pháp lớp UIViewController tryRotationToDeviceOrientation là tất cả những gì tôi cần. – dysfunction