2011-03-16 15 views
9

पर CoreMotion/DeviceMotion का उपयोग करके एक छवि फ़्लोटिंग प्रभाव को सिमुलेट करना मेरे पास व्यू कंट्रोलर के भीतर छवियों की एक श्रृंखला है।आईफोन

मैं उनके अलग-अलग परतों बदलने से "चल" हूँ उन्हें:

img.layer.transform = CATransform3DMakeTranslation(0.0f, 0.0f, myZ); 

यह बनाने का प्रभाव परतों स्क्रीन के ऊपर तैरने लगते हैं देता है - सिम्युलेटर में, वहाँ कोई दिखाई प्रभाव होगा (जो सही बात)।

मैं जो करना चाहता हूं वह एक प्रभाव है जहां डिवाइस को बाएं/दाएं/आगे/या पीछे ले जाने से परतें फ़्लोटिंग की तरह दिखती हैं। जब आप बाईं ओर डिवाइस को झुकाते हैं, तो उसे पूरे दृश्य को दाईं ओर कोण करना चाहिए। इससे आपको डिवाइस को स्थानांतरित करने की तरह महसूस हो जाएगा जिससे आप कोनों के चारों ओर देख सकें - यानी यह महसूस कर देगा कि छवियां वास्तव में स्क्रीन के ऊपर तैर रही हैं, क्योंकि वे अलग-अलग दरों (उनके जेड-इंडेक्स के आधार पर) पर चले जाएंगे।

मैंने एक परीक्षण परियोजना (project file here) बनाई है जिसमें एक नमूना प्रोजेक्ट है जो इसे प्रदर्शित करता है।

मेरी समस्या यह है कि मैं गणित व्यक्ति नहीं हूं, इसलिए मैं सूक्ष्म फ़्लोटिंग प्रभाव को अनुकरण करने के सर्वोत्तम तरीके से संघर्ष कर रहा हूं। अभी, मैं DeviceMotion के लिए एक श्रोता, जो तब करता है:

self.view.layer.sublayerTransform = CATransform3DMakeRotation(20.0f * M_PI/180.0f, 2*motion.attitude.pitch, -2*motion.attitude.roll, 0); 

यह बहुत जो मैं चाहता के करीब है, लेकिन यह वास्तव में सही नहीं है।

मुझे लगता है कि यह प्रभाव कुछ ऐसा होगा जो कई अलग-अलग अनुप्रयोगों में उपयोग किया जा सकता है। मैं इसे किसी मित्र को विस्तारित करने की उम्मीद कर रहा हूं और मैं चेहरे का पता लगाने के साथ काम कर रहा हूं (इसलिए यह किसी व्यक्ति के चेहरे के आंदोलन के आधार पर मूल दृश्य को स्थानांतरित करेगा - भले ही वे फोन/डिवाइस को पूरी तरह से रखें)।

मुझे एहसास है कि मैं लोगों को "ओपनजीएल का उपयोग" का जवाब दूंगा। यह वह जवाब नहीं है जो मुझे चाहिए - जब तक कि आप कोड का एक हिस्सा पोस्ट न करें जो दिखाता है कि इस परियोजना के भीतर इसे कैसे एकीकृत किया जाए। (मैं हल करने के लिए नई समस्याओं की तलाश नहीं कर रहा हूं। :-)

फिर से, पूरी परियोजना यहां (iphone floating views) है जो इस प्रभाव को देखना चाहती है, जो अभी ठीक है। (जब यह काम कर रहा है, तो मैं यहां पोस्टरिटी के लिए जुड़ी पूर्ण (कामकाजी) परियोजना छोड़ दूंगा।)

उत्तर

5

मुझे लगता है कि मुझे यह मिल गया है! मेरे लिए

[appDelegate.motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] 
                withHandler: 
    ^(CMDeviceMotion *motion, NSError *error) { 

     CATransform3D transform; 
     transform = CATransform3DMakeRotation(motion.attitude.pitch, 1, 0, 0); 
     transform = CATransform3DRotate(transform, motion.attitude.roll, 0, 1, 0); 

     self.view.layer.sublayerTransform = transform; 
    }]; 

वर्क्स आकर्षण की तरह, अगर आप कुल्हाड़ियों फ्लिप करना चाहते हैं, तो बस उन 1s के सामने ऋण चिह्न जोड़ें: इसका उपयोग करें।

+0

आप अद्भुत हैं। यह एक आकर्षण की तरह काम करता है - और आप बिल्कुल सही हैं ... मैं सिर्फ कोणों के लिए ऑफसेट को ट्विक करने जा रहा हूं, लेकिन यह मुझे * बिल्कुल * प्रभाव देता है जिसके लिए मैं जा रहा था। मैंने अभी भी काम कर रहे डेमो प्रोजेक्ट को अपलोड किया है - धन्यवाद! –