ios - يقبل - مشكله عدم تحميل البرامج من المتجر




اكتشاف ما إذا كان التطبيق قيد التشغيل في وضع Slide Over أو Split View في iOS 9 (8)

إضافة إلى @ Tamas الجواب:
إليك مقتطف الشفرة الذي سيحافظ على هذه العلامة تلقائيًا بغض النظر عن الدوران.

 -(void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection
{
 // simply create a property of 'BOOL' type
 isRunningInFullScreen = CGRectEqualToRect([UIApplication sharedApplication].delegate.window.frame, [UIApplication sharedApplication].delegate.window.screen.bounds);
}

في iOS 9 ، هل من الممكن اكتشاف متى يتم تشغيل تطبيق ما في وضع التقديم أو التقسيم في iOS 9؟

لقد حاولت القراءة من خلال documentation Apple على iOS 9 تعدد المهام ، ولكن لم يكن لديك أي حظ مع هذا ...

أسأل لأنه قد يكون لديّ ميزة في تطبيقي أريد تعطيلها عند فتح التطبيق في Slide Over.


اضطررت مؤخرًا إلى تحديد نمط عرض أحد التطبيقات ، بما في ذلك ، ليس فقط في حالة تغييره إلى عرض مقسم أو عرض مرئي ، بل أيضًا جزء من الشاشة قيد الاستخدام للتطبيق (كامل ، 1/3 ، 1/2 ، 2/3). إضافة هذا إلى فئة فرعية ViewController تمكنت من حل المشكلة.

/// Dismisses this ViewController with animation from a modal state.
func dismissFormSheet () {
    dismissViewControllerAnimated(true, completion: nil)
}

private func deviceOrientation () -> UIDeviceOrientation {
    return UIDevice.currentDevice().orientation
}

private func getScreenSize () -> (description:String, size:CGRect) {
    let size = UIScreen.mainScreen().bounds
    let str = "SCREEN SIZE:\nwidth: \(size.width)\nheight: \(size.height)"
    return (str, size)
}

private func getApplicationSize () -> (description:String, size:CGRect) {
    let size = UIApplication.sharedApplication().windows[0].bounds
    let str = "\n\nAPPLICATION SIZE:\nwidth: \(size.width)\nheight: \(size.height)"
    return (str, size)
}


func respondToSizeChange (layoutStyle:LayoutStyle) {
    // Respond accordingly to the change in size.
}

enum LayoutStyle: String {
    case iPadFullscreen         = "iPad Full Screen"
    case iPadHalfScreen         = "iPad 1/2 Screen"
    case iPadTwoThirdScreeen    = "iPad 2/3 Screen"
    case iPadOneThirdScreen     = "iPad 1/3 Screen"
    case iPhoneFullScreen       = "iPhone"
}

private func determineLayout () -> LayoutStyle {
    if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
        return .iPhoneFullScreen
    }
    let screenSize = getScreenSize().size
    let appSize = getApplicationSize().size
    let screenWidth = screenSize.width
    let appWidth = appSize.width
    if screenSize == appSize {
        return .iPadFullscreen
    }

    // Set a range in case there is some mathematical inconsistency or other outside influence that results in the application width being less than exactly 1/3, 1/2 or 2/3.
    let lowRange = screenWidth - 15
    let highRange = screenWidth + 15

    if lowRange / 2 <= appWidth && appWidth <= highRange / 2 {
        return .iPadHalfScreen
    } else if appWidth <= highRange / 3 {
        return .iPadOneThirdScreen
    } else {
        return .iPadTwoThirdScreeen
    }

}

override func traitCollectionDidChange(previousTraitCollection: UITraitCollection?) {
    super.traitCollectionDidChange(previousTraitCollection)
    respondToSizeChange(determineLayout())
}

جرب [UIScreen mainScreen] .bounds، self.window.screen.bounds، self.window.frame، UIApplication.sharedApplication.keyWindow.frame وهكذا ، تم حل حل العمل الوحيد

CGRect frame = [UIScreen mainScreen].applicationFrame;

التي أصلحت هذه الطريقة

CGRect frame = [UIScreen mainScreen].applicationFrame;
frame = CGRectMake(0, 0, frame.size.width + frame.origin.x, frame.size.height + frame.origin.y);
self.window.frame = frame;

ستكون فئة الحجم الأفقي مدمجة عندما تكون في الشريحة المنحدرة أو عرض التقسيم بنسبة 33٪. لا أعتقد أنه يمكنك الكشف بمجرد أن تصل إلى 50٪ أو 66٪.


لقد تأخرت للحفل ، ولكن إذا كنت تريد خاصية تعمل بشكل مستقل عن الاتجاه ، فجرّب هذا:

extension UIApplication 
{
    func isRunningInFullScreen() -> Bool
    {
        if let w = self.keyWindow
        {
            let maxScreenSize = max(UIScreen.mainScreen().bounds.size.width, UIScreen.mainScreen().bounds.size.height)
            let minScreenSize = min(UIScreen.mainScreen().bounds.size.width, UIScreen.mainScreen().bounds.size.height)
            let maxAppSize = max(w.bounds.size.width, w.bounds.size.height)
            let minAppSize = min(w.bounds.size.width, w.bounds.size.height)
            return maxScreenSize == maxAppSize && minScreenSize == minAppSize
        }

        return true
    }
}

ما عليك سوى التحقق مما إذا كانت نافذتك تحتل الشاشة بأكملها:

BOOL isRunningInFullScreen = CGRectEqualToRect([UIApplication sharedApplication].delegate.window.frame, [UIApplication sharedApplication].delegate.window.screen.bounds);

إذا كان هذا خطأ ، فأنت تعمل في عرض مقسم أو شريحة.

إليك الشفرة التي تم قصها والتي ستحافظ على هذا العلم تلقائيًا بغض النظر عن الدوران

-(void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection
{
 // simply create a property of 'BOOL' type
 isRunningInFullScreen = CGRectEqualToRect([UIApplication sharedApplication].delegate.window.frame, [UIApplication sharedApplication].delegate.window.screen.bounds);
}

وأنا متأخر حقا للحفل! لكن مع ذلك ، هناك حل بسيط وسريع للمشكلة. باستخدام let width = UIScreen.mainScreen().applicationFrame.size.width يمكننا اكتشاف عرض نافذة تطبيقي ، ومن ثم تحدث الأشياء عندما تكون أصغر من رقم معين (أي على شاشة iPhone أو في طريقة العرض المجزأة) ، مفيدة لجعل أشياء مختلفة تحدث على شاشات أصغر. لكي يتحقق الكمبيوتر من العرض مرارًا وتكرارًا ، يمكننا تشغيل NSTimer كل مائة ثانية ، ثم القيام بالأشياء إذا كان العرض أعلى / أقل من شيء ما.

بعض القياسات بالنسبة لك (عليك أن تقرر ما الذي سيحدث لعرض الأشياء فوق / أسفل): iPhone 6S Plus: 414.0mm
iPhone 6S: 375.0mm
iPhone 5S: 320.0mm
باد (صورة): 768.0mm
iPad (1/3 split split): 320.0mm
iPad Air 2 (عرض انقسام 1/2): 507.0mm
باد (المناظر الطبيعية): 1024.0mm

إليك مقتطف الشفرة:

class ViewController: UIViewController {

var widthtimer = NSTimer()

func checkwidth() {

var width = UIScreen.mainScreen().applicationFrame.size.width

if width < 507 { // The code inside this if statement will occur if the width is below 507.0mm (on portrait iPhones and in iPad 1/3 split view only). Use the measurements provided in the  answer above to determine at what width to have this occur.

    // do the thing that happens in split view
    textlabel.hidden = false

} else if width > 506 {

    // undo the thing that happens in split view when return to full-screen
    textlabel.hidden = true

}
}


override func viewDidAppear(animated: Bool) {

widthtimer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: "checkwidth", userInfo: nil, repeats: true) 
// runs every hundredth of a second to call the checkwidth function, to check the width of the window.

}

override func viewDidDisappear(animated: Bool) {
widthtimer.invalidate()
}

}

آمل أن يساعد ذلك أي شخص يأتي في مرحلة الطفولة!


يمكنك مشاهدة كلتا -willTransitionToTraitCollection: withTransitionCoordinator: لفئة الحجم و viewWillTransitionToSize: withTransitionCoordinator: for the CGSize of your view. لا ينصح باستخدام ترميز الرموز في حجم القيم.





ios9