2009-03-05 12 views
5

मैं अपने आईफोन ऐप में सरल पेंट कार्यक्षमता को लागू करने की कोशिश कर रहा हूं। मैंने बिटमैप ब्रश के साथ बिटमैप अपडेट करने का प्रयास किया, और मैंने this tutorial भी कोशिश की।छूने के लिए बनाए रखने के लिए पर्याप्त तेज़ी से आकर्षित नहीं कर सकता है?

दोनों विधियों में एक ही समस्या है, भले ही कोड लगभग पूरी तरह से अलग हो। यह केवल डिवाइस पर होता है - सिम्युलेटर ठीक काम करता है।

जब मैं स्क्रीन को स्पर्श करता हूं और अपनी अंगुली को स्थानांतरित करता हूं, तो स्क्रीन अपडेट नहीं होती है। जब मैं अपनी अंगुली को रोकता या उठाता हूं, तो स्क्रीन अपडेट हो जाती है। यह एक बहुत अच्छा उपयोगकर्ता अनुभव नहीं है!

मैंने छूने से drawRect को कॉल करने का प्रयास किया सीधे चलाया, लेकिन पाया कि ड्राइंग संदर्भ (जिसे मैं UIGraphicsGetCurrentContext का उपयोग कर पुनर्प्राप्त करता हूं) कई कॉलों के लिए अमान्य है, इसलिए प्रत्येक स्पर्श के लिए स्क्रीन को स्वयं चित्रित करना काम नहीं करता है।

कोई विचार?

किसी भी मदद के लिए धन्यवाद, यह काफी निराशाजनक रहा है!

Henning

उत्तर

0

आप सीधे drawRect फोन नहीं कर सकते हैं:। मांग पर अपनी स्क्रीन रीफ्रेश करने के लिए, [self setNeedsDisplay] को अपने touchesMoved विधि से कॉल करने का प्रयास करें, जो drawRect: पर कॉल के लिए उचित संदर्भ सेट करेगा।

+0

धन्यवाद, लेकिन मैंने छूने से एक [स्वयं सेटडिड्सडिस्प्ले] करने का प्रयास किया। यह मदद नहीं की। – Henning

2

ऐसा लगता है कि आप मुख्य रन लूप को प्रदर्शन को अपडेट करने का मौका नहीं दे रहे हैं। आपके ड्राइंग कोड को स्पर्श ईवेंट के बीच के समय से निष्पादित करने में अधिक समय लग सकता है, इसलिए प्रदर्शन कभी अपडेट नहीं होता है। जब आप अपनी उंगली उठाते हैं, तो यह अद्यतन होता है क्योंकि यह अब आपके ड्राइंग से बोझ नहीं होता है।

आप पृष्ठभूमि ड्राइंग पर चलाने के लिए अपने ड्राइंग की भारी गणना को कतारबद्ध करने के लिए NSOperationQueue जैसे कुछ का उपयोग करके, इसे गति देने के लिए अपने चित्र को अनुकूलित करने के लिए अनुकूलित कर सकते हैं (उदाहरण के लिए स्क्रीन के गंदे क्षेत्र के भीतर ही चित्रित करना), या अपनी प्रतिक्रिया को चिकनी रखने के लिए चुनिंदा स्पर्श ड्रॉइंग इवेंट्स छोड़ना।

एक अतिरिक्त संभावना आपके भारी ड्राइंग कोड को एक अलग तरीके से रख रही है और इसे प्रदर्शन के माध्यम से कॉल कर रही है चयनकर्ता: withObject: afterDelay, 10 मिलीसेकंड (या छोटी) देरी के साथ। यह मुख्य रन लूप को वर्तमान स्थिति के साथ प्रदर्शन को अपडेट करने का मौका दे सकता है। मैंने इसका परीक्षण नहीं किया है, लेकिन अगर मुझे सही याद है तो मैंने यह काम देखा है।

+0

मैं इसे आज़मा दूंगा और देख सकता हूं कि यह कैसा चल रहा है। धन्यवाद। – Henning

संबंधित मुद्दे