ios - आईओएस के लिए फ़्लैश प्रो एएस 3.0 एयर, ओरिएंटेशन इवेंट काम नहीं कर रहा है




actionscript-3 air (2)

मैं आईओएस सेटिंग्स के लिए फ्लैश एयर में पोर्ट्रेट पर सेट एक डिफ़ॉल्ट ओरिएंटेशन के साथ एक ऐप विकसित कर रहा हूँ; और ऑटो ओरिएंटेशन बंद है

हालांकि एक निश्चित मूवी क्लिप जोड़ने के बाद मुझे यह पता लगाना है कि क्या ओरिएंटेशन में परिवर्तन होता है और फिर एक लैंडस्केप या पोर्ट्रेट डिस्प्ले के लिए अपनी स्थिति बदल जाती है।

समस्या यह है कि अगर मैं स्वत: ऑरेंजेशन को अक्षम करता हूं तो स्टेज ऑरियंटेशन एवेन्ट.ORIENTATION_CHANGE को प्रेषित नहीं किया जाएगा। और यहां तक ​​कि अगर यह सक्षम भी हो, तो श्रोता ही प्रेषित होगा जब ओरिएंटेशन उल्टा या डिफ़ॉल्ट (परिदृश्य नहीं)

package  
{  

    import flash.display.MovieClip;  
    import flash.events.MouseEvent;  
    import flash.display.Stage;  
    import flash.events.StageOrientationEvent;  
    import flash.display.StageOrientation;  
    import flash.events.Event;  
    public class NoteBook extends MovieClip  
    {  
        public var type: String = new String();  
        public var deviceHeight: Number = new Number();  
        private var nbp: NoteBookPic;  

        public function NoteBook(DeviceHeight: Number = 720)  
        {  
            nbp = new NoteBookPic();  
            this.addChild(nbp);  

            nbp.deviderPic.visible = false;  
            this.deviceHeight = DeviceHeight;  

            this.x = 0;  
            this.y = deviceHeight / 2;  
            this.scaleY = (deviceHeight / 720) * .65;  
            this.scaleX = this.scaleY;  

            this.addEventListener(MouseEvent.CLICK, clicked);  
            this.addEventListener(Event.ADDED_TO_STAGE, addedToStage);  
        }  
        public function exit()  
        {  
            this.removeEventListener(MouseEvent.CLICK, clicked);  
            this.stage.removeEventListener(StageOrientationEvent.ORIENTATION_CHANGE, orient);  
            this.parent.removeChild(this);  
        }  
        private function clicked(e: MouseEvent)  
        {  

        }  
        private function addedToStage(e: Event)  
        {  
            this.removeEventListener(Event.ADDED_TO_STAGE, addedToStage);  
            this.stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGE, orient);  
        }  
        private function orient(e: StageOrientationEvent)  
        {  
            trace(e.beforeOrientation, e.afterOrientation)  
        }  
    }  

}  

अद्यतन करें:

मैं एडीएसएफ़® फ्लैश ® प्लेटफ़ॉर्म के लिए एक्शन स्क्रिप्ट 3.0 3.0 संदर्भ में पढ़ता हूं कि स्टेज ऑयरेन्टेशन एवेंट्स केवल उपकरण रोटेशन के लिए प्रेषित होते हैं जब ऑटोऑरेंटेशन सही होता है; लेकिन जैसा कि मैंने ऊपर वर्णित किया है, भले ही वह सक्षम हो, श्रोता केवल तब प्रेषित होगा, जब ओरिएंटेशन उल्टा या डिफ़ॉल्ट (परिदृश्य नहीं) में बदल जाता है। जो मेरे मामले में एक समस्या है क्योंकि मेरे ऐप को पोर्ट्रेट एप होना चाहिए, इसके अलावा मेरे मूवी क्लिप के मुकाबले बहुत ही मूवी क्लिप होगा। और जब यह मंच पर होता है तो मैं इसे किसी भी ओरिएंटेशन परिवर्तन, दो चित्रों और दो परिदृश्य पर प्रतिक्रिया देना चाहता हूं।


यदि आप अपना आवेदन पहलू राइटियो पोर्ट पर लॉक कर रहे हैं तो आपको केवल ऐसे पहलुओं को प्राप्त होगा जो कि aspectRatio को संतुष्ट करते हैं, इसलिए आपको कभी भी एक लैंडस्केप ओरिएंटेशन नहीं मिलना चाहिए।

उन उन्मुखीकरण कार्यक्रमों को प्राप्त करने के लिए आपको ऐपआरएटीओ को किसी भी रूप में सेट करने के लिए अपने एप्लिकेशन कॉन्फ़िगरेशन को बदलना होगा:

<aspectRatio>any</aspectRatio>
<autoOrients>true</autoOrients>

आप StageOrientationEvent.ORIENTATION_CHANGE का प्रयोग कर रहे हैं जो सही है। मैं आपके कोड से नहीं जाना था क्योंकि मुझे मुख्य चीजें नहीं दिखाई देतीं नीचे उदाहरण कुंजी कोड है

एक कायरता बात यह है कि Capabilities.screenResolutionX और Capabilities.screenResolutionY आपको स्क्रीन आयाम देगा लेकिन वे डिवाइस रोटेशन के साथ नहीं बदलेगा। तो आपको स्क्रीन अभिविन्यास का ट्रैक रखना होगा और चौड़ाई और ऊंचाई खुद तय करना होगा।

var bStagePortrait: Boolean;

stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGE, orientationChanged);

if (stage.orientation == StageOrientation.DEFAULT || stage.orientation == StageOrientation.UPSIDE_DOWN) {
    bStagePortrait = true;
} else if (stage.orientation == StageOrientation.ROTATED_LEFT || stage.orientation == StageOrientation.ROTATED_RIGHT) {
    bStagePortrait = false;
}

//  set width and height based on current rotation (Capabilities.screenResolutionX and Y do not change with device rotation)
function fSetScreenDimensions(): void {
    if (bStagePortrait) {
        iWidth = Capabilities.screenResolutionX;
        iHeight = Capabilities.screenResolutionY;
    } else {
        iWidth = Capabilities.screenResolutionY;
        iHeight = Capabilities.screenResolutionX;
    }
}

private function orientationChanged(e: StageOrientationEvent): void {
switch (e.afterOrientation) {
    case StageOrientation.DEFAULT:
        bStagePortrait = true;
        break;
    case StageOrientation.ROTATED_RIGHT:
        bStagePortrait = false;
        break;
    case StageOrientation.ROTATED_LEFT:
        bStagePortrait = false;
        break;
    case StageOrientation.UPSIDE_DOWN:
        bStagePortrait = true;
        break;
    }
}