সমর্থিত ওরিয়েন্টেশনগুলির সাথে অ্যাপ্লিকেশনটির সাথে কোনও সাধারণ দিকনির্দেশ নেই, এবং উচিত অডিওরোটেট হ্যাঁ 'ফিরিয়ে দিচ্ছে


94

আমার অ্যাপ্লিকেশন (আইপ্যাড; আইওএস 6) কেবলমাত্র একটি ল্যান্ডস্কেপ অ্যাপ্লিকেশন, তবে আমি যখন কোনও ইউআইপিপভারকন্ট্রোলার ব্যবহার করে ফটো লাইব্রেরি প্রদর্শন করি তখন এটি এই ত্রুটিটি ছুঁড়ে দেয়: Supported orientations has no common orientation with the application, and shouldAutorotate is returning YES.আমি প্রচুর কোড পরিবর্তন করার চেষ্টা করেছি তবে আমার ভাগ্য নেই।


4
আপনার একটি উত্তর গ্রহণ করা উচিত। আপনি যখন আপনার সমস্যার সঠিক উত্তর চিহ্নিত করেন তখন সাহায্যের জন্য এবং একই সমস্যাযুক্ত অন্যান্য লোকদের জন্য অনেক লোক রয়েছে!
brush51

4
না! আইওএস 7 তে কোন সমাধানের কাজ নেই :( (হেডব্যাং)
আসিফহবিব

উত্তর:


95

আইওএস 6 এ আপনি তিনটি জায়গায় ইন্টারফেস ওরিয়েন্টেশন সমর্থন করেছেন:

  1. .Plist (বা লক্ষ্য সংক্ষিপ্তসার স্ক্রিন)
  2. আপনার ইউআইএপ্লিকেশনডেলিগেট
  3. যে ইউআইভিউকন্ট্রোলার প্রদর্শিত হচ্ছে

আপনি যদি এই ত্রুটিটি পেয়ে থাকেন তবে এটি সম্ভবত আপনার ইউআইপিপওভারে যে ভিউটি লোড করা হচ্ছে তা কেবল প্রতিকৃতি মোডকেই সমর্থন করে। এটি গেম সেন্টার, আইএডি বা আপনার নিজস্ব দৃষ্টিকোণের কারণে ঘটতে পারে।

যদি এটি আপনার নিজের মতামত হয় তবে আপনি আপনার ইউআইভিউউকন্ট্রোলারে সমর্থিত ইন্টারফেস ওরিয়েন্টেশনকে ওভাররাইড করে এটি ঠিক করতে পারেন:

- (NSUInteger) supportedInterfaceOrientations
{
     //Because your app is only landscape, your view controller for the view in your
     // popover needs to support only landscape
     return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight;
}

যদি এটি আপনার নিজের দৃষ্টিভঙ্গি না হয় (যেমন আইফোনে গেমসেন্টার) তবে আপনার .plist প্রতিকৃতি মোড সমর্থন করে তা নিশ্চিত করা দরকার need আপনার ইউআইএ অ্যাপ্লিকেশনডেলিগেট প্রতিকৃতি মোডে প্রদর্শিত যে ভিউ সমর্থন করে তাও আপনাকে নিশ্চিত করতে হবে। আপনি এটি আপনার .লিস্ট সম্পাদনা করে এবং তারপরে আপনার ইউআইএপ্লিকেশনডেলিগেটে সমর্থিত ইন্টারফেস ওরিয়েন্টেশন ওভাররাইড করে এটি করতে পারেন:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight;
}

4
UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRightসমান UIInterfaceOrientationMaskAllButUpsideDown UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRightসমানUIInterfaceOrientationMaskLandscape
ভালেরি পাভলভ

4
অথবা কেবল ইউআইআইন্টারফেস ওরিয়েন্টেশনমাস্কএল ব্যবহার করুন।
মার্ক ওয়াং

পারফেক্ট যদিও "পোর্ট্রেট-কেবল" পপওভার ল্যান্ডস্কেপটিতে কাজ করবে, এটি কেবলমাত্র একটি ল্যান্ডস্কেপ-দেখার দৃশ্য নিয়ন্ত্রণকারীর উপস্থাপন করতে পারে না।
নিল এয়ার্ড্ট

না! সমাধান আইওএস 7 :( কাজ করা হয়নি। Stackoverflow.com/questions/23005351/...
AsifHabib

আইওএস-এ কাজ করেছেন ৮. যদিও এটির জন্য পোর্ট্রেট সমর্থন যোগ করতে হয়েছিল। ধন্যবাদ.
ইয়ারোস্লাভ

65

সাবক্লাসিং এড়াতে এবং টন কোড যুক্ত করার উপায় অনুসন্ধান করার জন্য অনেক সময় ব্যয় করার পরে, আমার এক লাইন কোড সমাধানটি এখানে।

একটি নতুন একটি ইউআইআইমেজপিকার কনট্রোলারের বিভাগ তৈরি করুন এবং যুক্ত করুন

-(BOOL)shouldAutorotate{
    return NO;
}

এই সব লোকেরা!


4
আমার জন্যও কাজ করেছেন, পুরোপুরি পরীক্ষা করা হয়নি তবে এখন পর্যন্ত কৌশলটি করেছেন বলে মনে হচ্ছে।
মিজগুলি 64

4
এটি সেরা সমাধান বলে মনে হচ্ছে।
জুলিয়ান

4
কাজ! এটি দুর্দান্ত, এবং এটি সত্যিই আমাকে চিমটিটে সাহায্য করেছিল। ধন্যবাদ ড লুইজি !!
ব্র্যাক

4
ভাল লাগল আইওএস-এ আমার জন্য কাজ করে full. আপনি সম্পূর্ণ নমনীয়তার জন্য বিভাগে এই কনফিগারযোগ্যটিও তৈরি করতে পারেন।
জারেড ইগান


43

এই ত্রুটি বার্তাটি উপস্থিত হতে পারে এমন আরও একটি মামলা রয়েছে। আমি সমস্যাটি না পাওয়া পর্যন্ত কয়েক ঘন্টা অনুসন্ধান করেছিলাম। এই থ্রেডটি বেশ কয়েকবার পড়ার পরে খুব সহায়ক হয়েছিল।

যদি আপনার মূল দেখার নিয়ামকটি ল্যান্ডস্কেপ ওরিয়েন্টেশনে ঘোরানো হয় এবং আপনি একটি কাস্টম সাব ভিউ কন্ট্রোলারকে অনুরোধ করেন যা প্রতিকৃতি নির্দেশে প্রদর্শিত হওয়া উচিত যখন আপনার কোডটি দেখায় এই ত্রুটি বার্তাটি ঘটতে পারে:

- (NSUInteger)supportedInterfaceOrientations {

    return UIInterfaceOrientationPortrait;
}

এখানে ফাঁদটি ছিল এক্সকোডের ইন্টিলিসেন্সটি "ইউআইআইন্টারফেস ওরিয়েন্টেশন পোর্ট্রেট" পরামর্শ দিয়েছে এবং আমি এটির যত্ন নিই না। প্রথম নজরে এটি সঠিক বলে মনে হয়েছিল।

ডান মুখোশের নামকরণ করা হয়েছে

UIInterfaceOrientationMaskPortrait

ছোট ইনফিক্স "মাস্ক" সম্পর্কে সচেতন থাকুন , অন্যথায় আপনার সাবভিউটি একটি ব্যতিক্রম এবং উপরে উল্লিখিত ত্রুটির বার্তা দিয়ে শেষ হবে।

নতুন enums কিছুটা স্থানান্তরিত হয়। পুরানো enums অবৈধ মান ফিরে!

(ইউআইএপ্লিকেশন.-তে আপনি নতুন ঘোষণাটি দেখতে পারেন: UIInterfaceOrientationMaskPortrait = (1 << UIInterfaceOrientationPortrait) )

সমাধানটি হ'ল:

- (BOOL)shouldAutorotate {

    return YES;
}

- (NSUInteger)supportedInterfaceOrientations {

    // ATTENTION! Only return orientation MASK values
    // return UIInterfaceOrientationPortrait;

    return UIInterfaceOrientationMaskPortrait;
} 

দ্রুত ব্যবহারে

override func shouldAutorotate() -> Bool {

    return true
}

override func supportedInterfaceOrientations() -> Int {

    return Int(UIInterfaceOrientationMask.Portrait.rawValue)
}

4
আমার সাথে একই কারণে ঘটেছিল
চেনএক্সিন

আমি আশা করি আপেল সবেমাত্র UIIterterfaceOrientationMask এর রিটার্ন টাইপ করে দিতেন যাতে ফিরে যাওয়ার দরকারটি আরও কিছুটা স্পষ্ট।
লাইটনিংস্ট্রিক

জ্যাকপিয়ার্সের উত্তরটি সঠিক দেখাচ্ছে। তবে যখন তথ্য.পুলিস্টটি দেখুন, সেখানে ইউআইআইএনটারফেস ওরিয়েন্টেশনপোর্ট্রেট, ইউআইআইএনটারফেস ওরিয়েন্টেশন ল্যান্ডস্কেপ লেফট, ইউআইআইএনটারফেস ওরিয়েন্টেশন ল্যান্ডস্কেপ রাইটের সাথে ইউআইএসপপোর্টডইন্টারফেস ওরিয়েন্টেশন রয়েছে। এখানে কোন মাস্ক নেই
onmyway133

4
@ অ্যানমিওয়ে: সত্য, প্লাস্ট মানগুলি পরিবর্তিত হয়নি। এর আগে আইওএস সংস্করণে অ্যাপল কোডের অভ্যন্তরে "নন" মাস্ক মান ব্যবহার করেছিল। এটি কিছু উত্তরাধিকারসূত্রে স্টাফ। আমি ধরে নিচ্ছি যে আপেল এখন অভ্যন্তরীণভাবে প্লাস্ট মানগুলি কিছুটা বদলাচ্ছে।
জ্যাকপিয়ার্স

আমার অ্যাপ্লিকেশনটি Xcode 6.2 এর একটি আইপ্যাড সিমুলেটারে এই ক্রাশ সমস্যা ছাড়াই কাজ করত। এবং কিছুদিন আগে আমি Xcode 6.3 এ আপগ্রেড করার পরে এটি ক্র্যাশ হয়ে গেছে। এখন এই সমাধানটি আমার সমস্যার সমাধান করে। অনেক অনেক ধন্যবাদ :-)
গোল্ডেন থাম্ব

22

শুধুমাত্র একটি ল্যান্ডস্কেপ অ্যাপে চিত্র চয়নকারী উপস্থাপন করার সময় আমার একই রকম সমস্যা ছিল। ডাঃ লুইজির পরামর্শ অনুসারে, আমি আমার নিয়ামকের শুরুতে নিম্নলিখিত বিভাগটি যুক্ত করেছি।

// This category (i.e. class extension) is a workaround to get the
// Image PickerController to appear in landscape mode.
@interface UIImagePickerController(Nonrotating)
- (BOOL)shouldAutorotate;
@end

@implementation UIImagePickerController(Nonrotating)

- (BOOL)shouldAutorotate {
  return NO;
}
@end

আপনার ভিউকন্ট্রোলার। এম ফাইলের @ কার্যকরকরণের ঠিক আগে এই লাইনগুলি যুক্ত করা সহজ।


আমার কাছে কেবল একটি প্রতিকৃতি অ্যাপ রয়েছে! এবং আমি ল্যান্ডস্কেপ মোডে ক্যামেরা প্রদর্শন করতে চাই। কোন সমাধান ?????
আসিফহবিব

ত্রসতির কাজ হয়নি? আমার একই সমস্যা আছে এবং আমি আপনার কোডটি চেষ্টা করেছি তবে এখনও একই ব্যতিক্রম প্রদর্শিত হচ্ছে *** অপ্রয়োজনীয় ব্যতিক্রম 'ইউআইএপ্লিকেশনআইনডিয়ালিফরমেশন ওরিয়েন্টেশন' এর কারণে অ্যাপ্লিকেশনটি সমাপ্ত করা হচ্ছে, কারণ: 'সমর্থিত ওরিয়েন্টেশনগুলির সাথে অ্যাপ্লিকেশনটির সাথে কোনও সাধারণ দিকনির্দেশ নেই, এবং উচিত অটোরিওয়েট হ্যাঁ ফিরে আসছে ..... ... আমি UIimagePickerView বিভাগের পদ্ধতিটিও একটি ব্রেকপয়েন্ট রেখেছিঅটোরোটেট সেখানে পৌঁছাতে হবে এবং কোনও ফিরিয়ে দিচ্ছে না তবুও এই ব্যতিক্রমটি দেয় .... আমার অ্যাপ্লিকেশনটি কেবল ল্যান্ডস্কেপ অ্যাপ্লিকেশন ... দয়া করে আমাকে সহায়তা করুন
विशाल 16 ই

পুরো অ্যাপ্লিকেশনটি আইওএস ৮ এ ল্যান্ডস্কেপ করার সময় এসকেস্টোর প্রোডাক্টভিউ কনট্রোলারকে প্রতিকৃতিতে উপস্থিত করতে বাধ্য করতে কাজ করে you আপনাকে ধন্যবাদ।
ইয়ারোস্লাভ

11

আমি আমার কোডে একই ত্রুটি বার্তার মুখোমুখি ছিলাম। আমি এটি পেলাম, এটি অ্যাপল দ্বারা রিপোর্টিত হিসাবে একটি বাগ:

https://devforums.apple.com/message/731764#731764

তার সমাধানটি অ্যাপ্লিকেশনটিতে এটি ঠিক করা। আমি এটি বাস্তবায়ন করেছি এবং এটি আমার পক্ষে কাজ করে!


যাইহোক, আমি মূলত এটি খুঁজে পেয়েছি: stackoverflow.com/questions/12522491/…
রবি

এটি সঠিক উত্তর ছিল, অ্যাপল থেকে সরাসরি, এবং তারপরে আমাকে ঠিক একই নির্দেশাবলী অনুসরণ করতে হয়েছিল তবে আইওএস 8 লক্ষ্য করে এমন অ্যাপ্লিকেশনটির জন্য সুইফটে এটি করতে হয়েছিল Everything সব কিছুই দুর্দান্ত কাজ করে। অ্যাপডেলিগেটস সমর্থিতআইন্টারফেস ওরিয়েন্টেশনস ফর ল্যান্ডস্কেপ এবং প্রতিকৃতি উভয়ের জন্য উইন্ডো, প্রতিটি স্বতন্ত্র সুইফ্ট ফাইল ওভাররাইড ফানক সমর্থন করে অন্তর্ভুক্ত ওরিয়েন্টেশনগুলি ল্যান্ডস্কেপটিতে কেবল তাই ঘুরবে না, তবে যখন কোনও প্রতিকৃতি ভিউ (আমার ক্ষেত্রে এসকেস্টোরপ্রডাক্টভিউ কনট্রোলার) লোড করার দরকার পড়ে!
র‌্যানলার্নস

জীজ, অনেকগুলি প্রস্তাবিত সমাধান রয়েছে এবং এটির এখন পর্যন্ত সর্বোচ্চ পয়েন্ট নেই, তবে এটি সত্যই সঠিক। আইওএস 10 এবং 9 এ পরীক্ষিত else
ডেমিয়ান টার্নার

6

আমারও একই সমস্যা ছিল এবং এই উত্তরটি আমার জন্য কাজ করে https://stackoverflow.com/a/12523916 । আরও মার্জিত সমাধান থাকলে আশ্চর্য হোন।

আমার কোড:

UIImagePickerController  *imagePickerController = [[NonRotatingUIImagePickerController alloc] init];
imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

UIPopoverController  *popoverVC = [[UIPopoverController alloc] initWithContentViewController:imagePickerController];    

[popoverVC presentPopoverFromRect:frame   // did you forget to call this method?
                           inView:view
         permittedArrowDirections:UIPopoverArrowDirectionAny
                         animated:YES];

আমি এটি করার চেষ্টা করেছিলাম কিন্তু যখন আমি কোডটি কল করতে বোতামটি ক্লিক করি তবে কিছুই প্রদর্শিত হয় না, আমি @interface NonRotatingUIImagePickerController : UIImagePickerController @end @implementation NonRotatingUIImagePickerController - (BOOL)shouldAutorotate { return NO; } @endকোডটিতে যুক্ত করার চেষ্টাও করি তবে আমার কোডটি ননরোটেটিং ইউআইআইমেজপিকারকন্ট্রোলার সনাক্ত করতে পারে না।
ডেসটিনি ডন

4
কিছু মনে করবেন না, এটি এখন ননরোটেটিং ইউআইজিএইচপিকার কনট্রোলার সনাক্ত করে তবে কিছুই এখনও প্রদর্শন করে না ... @ পিতাউইন
ডেসটিনি ডন

4

আইওএস 8 - আপনি পপওভারে প্রদর্শনের জন্য কোনও হ্যাক ছাড়াই ইউআইএমডালপ্রেজেনশনপোপার ব্যবহার করতে পারেন। আদর্শ না তবে কিছুই চেয়ে ভাল।

imagePicker.modalPresentationStyle = UIModalPresentationPopover;
imagePicker.popoverPresentationController.sourceView = self.view;
imagePicker.popoverPresentationController.sourceRect = ((UIButton *)sender).frame;

সম্পাদনা করুন: সম্ভবত বিভিন্ন ইউআইমোডালপ্রেজেন্টেশন স্টাইলগুলি চেষ্টা করুন - সম্ভবত আরও কিছু ল্যান্ডস্কেপে কাজ করবে।



2

আর একটি বিকল্প যা আমার সমস্যাগুলি সমাধান করেছে তা হ'ল ইউআইআইজেইপ পিকারকন্ট্রোলারের একটি সাবক্লাস তৈরি করা এবং নীচের পদ্ধতিটি ওভাররাইড করা

@interface MyImagePickerController ()

@end

@implementation MyImagePickerController

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

এটি ইউআইআইমেজপিকার কনট্রোলারের পরিবর্তে ব্যবহার করুন এবং এটি সব ঠিকঠাক কাজ করে।


1

বিভাগটি তৈরি করা এই ত্রুটিটি ঠিক করতে সত্যিই সহায়ক। এবং আপনার তৈরি বিভাগটি আমদানি করতে ভুলবেন না। এটি অনুপস্থিত পদ্ধতিটিকে ইউআইআইজেজপিকারকন্ট্রোলারের সাথে যুক্ত করবে এবং আইওএস on-তে এটি কেবলমাত্র ডকুমেন্টেশন বিটিডব্লিউ হিসাবে জানিয়েছে এটি প্রতিকৃতিতে কাজ করতে সীমাবদ্ধ করবে।

অন্যান্য সমাধানগুলি কাজ করে থাকতে পারে। তবে এসডিকে আইওএস ৮.x এর সাথে আইওএস .1.১ স্থাপন করতে সংকলিত এটি যেতে যাওয়ার উপায় মনে হচ্ছে।

.H-file:

#import <UIKit/UIKit.h>

@interface UIImagePickerController (iOS6FIX)

- (BOOL) shouldAutorotate;
- (UIInterfaceOrientation) preferredInterfaceOrientationForPresentation;

@end

.M-file:

#import "UIImagePickerController+iOS6FIX.h"

@implementation UIImagePickerController (iOS6FIX)

- (BOOL) shouldAutorotate {
    return NO;
}

- (UIInterfaceOrientation) preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationPortrait;
}

@end

1

সুইফট 3

let imagePicker = UIImagePickerController()

imagePicker.modalPresentationStyle = .popover
imagePicker.popoverPresentationController?.sourceView = sender // you can also pass any view 

present(imagePicker, animated: true)

0

প্রত্যাবর্তনের মান হিসাবে স্পষ্টত রূপান্তর UIInterfaceOrientationPortraitকরারUIInterfaceOrientationMaskPortrait সময় আমি এই ক্র্যাশ সমস্যার মুখোমুখি হয়েছি ।

UIPageViewControllerDelegateআপনার সকলের জন্য আরও কোড পটভূমি , কেবল এফওয়াইআই।

 -(UIInterfaceOrientationMask)pageViewControllerSupportedInterfaceOrientations:
(UIPageViewController *)pageViewController
{
    # return UIInterfaceOrientationPortrait;    # wrong
    return UIInterfaceOrientationMaskPortrait;  # correct
}

0

আমি সবেল্ট 4.x এর জন্য সমস্যাটি সমাধান করেছি

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    configureVideoOrientation()
}

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)
    coordinator.animate(alongsideTransition: nil, completion: { [weak self] _ in
        self?.configureVideoOrientation()
    })
}

private func configureVideoOrientation() {
    guard let previewLayer = self.previewLayer, let connection = previewLayer.connection else { return }
    if connection.isVideoOrientationSupported {
        let orientation = UIApplication.shared.statusBarOrientation
        switch (orientation) {
        case .portrait:
            previewLayer.connection?.videoOrientation = .portrait
        case .landscapeRight:
            previewLayer.connection?.videoOrientation = .landscapeRight
        case .landscapeLeft:
            previewLayer.connection?.videoOrientation = .landscapeLeft
        case .portraitUpsideDown:
            previewLayer.connection?.videoOrientation = .portraitUpsideDown
        default:
            previewLayer.connection?.videoOrientation = .portrait
        }

        previewLayer.frame = self.view.bounds
    }
}

আপনার উত্তরগুলির জন্য আপনাকে বলছি ধন্যবাদ। আমি সবেমাত্র ওয়ার্কড কোডটি কেটে ফেলেছি এবং কেবল এটির রিফেক্টর করেছি।


0

পুরো অ্যাপটি ল্যান্ডস্কেপে রয়েছে ধরে ধরে সুইফট 4 এবং তার উপরে আপনার প্রতিকৃতিতে আপনাকে একটি একক নিয়ামক উপস্থাপন করতে হবে। ভিউ কন্ট্রোলারে প্রতিকৃতি থাকতে হবে যাতে নিম্নলিখিতগুলি যুক্ত করুন:

override open var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    return .portrait
}

open override var shouldAutorotate: Bool {
    return false
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.