5

का उपयोग करने के लिए UIActionSheet को मजबूर करना मेरे ऐप में एक दृश्य नियंत्रक है जो अभिविन्यास को बदल नहीं सकता है। इसे एक ऐसे खेल के मैदान के बारे में सोचें जिसे जगह में तय रहने की जरूरत है।एक विशिष्ट अभिविन्यास

अब मैं एक यूआईएक्शनशीट रखना चाहता हूं, लेकिन जिस तरह से उपयोगकर्ता डिवाइस धारण कर रहा है, मैं शीट को ओरिएंटेशन से मेल करना चाहता हूं।

ऐसा लगता है कि UFCctionSheet, जैसा कि कहता है, MFComposerViewController को स्टेटसबार से इसका अभिविन्यास नहीं मिलता है, जिसे मैं अभिविन्यास के आधार पर घूर्णन कर रहा हूं, लेकिन अंतर्निहित दृश्य नियंत्रक से इसका अभिविन्यास प्राप्त करता है। दूसरे शब्दों में, UIActionSheet पोर्ट्रेट अभिविन्यास में आता है, इस पर ध्यान दिए बिना कि डिवाइस कैसा चल रहा है।

मैं कोशिश की है:

CGAffineTransform t = CGAffineTransformMakeRotation(lastUIAngle); 
[actionSheet setTransform:t]; 
if (UIInterfaceOrientationIsLandscape(lastOrientation)) 
    actionSheet.frame = CGRectMake(0, 0, 480, 320); 
else 
    actionSheet.frame = CGRectMake(0, 0, 320, 480); 
actionSheet.center = self.view.center; 

और मैं सही उन्मुखीकरण पाने के लिए प्रबंधन, लेकिन जिसके परिणामस्वरूप कार्रवाई चादर चित्र की ओर से आता है, और आकार है जैसे कि यह पोर्ट्रेट ओरिएंटेशन में अभी भी थे। एक्शन शीट के फ्रेम की गणना बटनों की संख्या आदि के आधार पर की जाती है।

क्या कोई भी निर्दिष्ट दिशा में उचित रूप से प्रदर्शित करने के लिए UIActionSheet को मजबूर करने में कामयाब रहा है?

(मैंने एक नया दृश्य बनाने की भी कोशिश की, जिसे बदल दिया गया था और सही आकार था, लेकिन यूआईएक्शनशीट ने इसे अनदेखा किया। नया यूआईवीव कंट्रोलर बनाने के लिए शेष बचे हुए हैं जो ऑटो घुमाता है, और यूआईएक्शन शीट इसका बच्चा है। हालांकि , इसका मतलब है कि मेरा खेल मैदान नए दृश्य नियंत्रक द्वारा पूरी तरह से अस्पष्ट हो जाता है।)

उत्तर

7

यह पता चला कि उत्तर बहुत आसान था। जो कुछ भी करने के लिए ओरिएंटेशन UIActionSheets मजबूर करने के लिए यह कोड जोड़ें आप चाहते हैं:

tempView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)]; 
tempView.transform = CGAffineTransformMakeRotation(lastUIAngle); 
tempView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); 
[self.view.window addSubview:tempView]; 

UIActionSheet *actionSheet = ... 

[actionSheet showInView:tempView]; 

lastUIAngle pi/2, जो इस मामले में, मैं पिछली बार उन्मुखीकरण बदल गया था से बचाया था की एक बहु है।

+2

IOS 6 – SpaceDog

+0

में मेरे लिए काम नहीं आप सही हैं। आईओएस 6 ने इसे तोड़ दिया। मैं एक कामकाज की तलाश में हूँ। – mahboudz

+2

आईओएस 6 ने कई चीजों को तोड़ दिया, उदाहरण के लिए ऑटोरोटेशन, विशेष रूप से यदि आप 4.x के लिए संकलित करते हैं और इसे 6.x डिवाइस पर चलाते हैं।कुछ ऐप्स बस अपेक्षित के रूप में autorotate नहीं है। शायद आपके कोड को तोड़ने और इस autorotate सामान पर समस्या कुछ संबंध है। – SpaceDog

0

इस विकल्प को चेक करें ->JonasGessner/JGActionSheet यदि आपको मूल लेआउट नहीं है, या आप इसे src कोड में संशोधित कर सकते हैं।

यह आईओएस 8.0.2 पर मेरे लिए काम किया। बस नीचे की तरह:

  1. इसे अपनी परियोजना में शामिल करें।

कॉपी JGActionSheet.h और JGActionSheet.m करने के लिए आप परियोजना

  1. आयात यह जहां एक कार्रवाई शीट का उपयोग करने जा रहे हैं।

#import "JGActionSheet.h"

  1. यह प्रयोग करें।

नमूना कोड:

JGActionSheetSection *menuSection = [JGActionSheetSection sectionWithTitle:nil message:@"Select Food" buttonTitles:@[@"Hamburger", @"Toast", @"Rice"] buttonStyle:JGActionSheetButtonStyleDefault]; 
[menuSection setButtonStyle:JGActionSheetButtonStyleRed forButtonAtIndex:0]; 

JGActionSheetSection *cancelSection = [JGActionSheetSection sectionWithTitle:nil message:nil buttonTitles:@[@"Cancel"] buttonStyle:JGActionSheetButtonStyleCancel]; 

NSArray *sections = @[menuSection, cancelSection]; 
JGActionSheet *sheet = [JGActionSheet actionSheetWithSections:sections]; 

[sheet setButtonPressedBlock:^(JGActionSheet *sheet, NSIndexPath *indexPath) { 
    [sheet dismissAnimated:YES]; 
}]; 

// Set specific orientation to action sheet 
sheet.transform = CGAffineTransformMakeRotation(M_PI); 

[sheet showInView:self.view animated:YES];