2011-02-06 7 views
8

मेरे पास एक छवि है जो दिखाती है कि मानचित्र पर कौन सा तरीका उत्तर है। यदि कोई नया शीर्षक पाया जाता है तो यह छवि CoreLocation द्वारा अपडेट की जाती है।CGAffineTransformMakeRotation मेरी छवि को फैलाता है, मैं गलत क्या कर रहा हूं?

locateMeView.transform = CGAffineTransformMakeRotation(([CoreLocationController sharedInstance].heading - 45) * M_PI/180); 
CGRect frame = locateMeView.frame; 
CGPoint pos = [MapClass vectorForLocation:[CoreLocationController sharedInstance].location mapCenter:curLocation zoom:curZoom]; 
frame.origin.x = (int)(self.view.bounds.size.width/2 + pos.x - frame.size.width/2); 
frame.origin.y = (int)(self.view.bounds.size.height/2 + pos.y - frame.size.height/2); 
frame.size.width = 24; 
frame.size.height = 24; 
locateMeView.frame = frame; 

CoreLocationController एक वर्ग है जो सामान्य CoreLocation के अद्यतन संग्रहीत करता है: यह भी सही स्थिति में रखा गया है, मैं निम्नलिखित कोड का उपयोग करें। MapClass मेरे मानचित्र पर अक्षांश/lng निर्देशांक को x/y निर्देशांक में बदल देता है। छवि की स्थिति सही है, लेकिन घूर्णन अजीब प्रभाव पैदा कर रहा है। 0 एन एमएफआई के लिए छवि सही है लेकिन इनके बीच छवि को फैलाया गया है जैसे कि यह ज़ेड-अक्ष के आसपास और एमएफआई/2 और 3 * एमएफआई/2 पर घूमता है, यह पूरी तरह से गायब हो जाता है। क्या कोई समझा सकता है कि क्या हो रहा है और मैं क्या गलत कर रहा हूं?

उत्तर

14

मुझे पता चला कि क्या गलत था (वैसे भी कम या भी कम)। ट्रांसफॉर्म प्रॉपर्टी का उपयोग करते समय आपको फ्रेम बदलने से स्थिति बदलने के लिए अनुमति नहीं है (किसी भी कारण से), आपको केंद्र संपत्ति का उपयोग करना होगा। तो अंत में कोड था:

CGPoint pos = [MapClass vectorForLocation:[CoreLocationController sharedInstance].location mapCenter:curLocation zoom:curZoom]; 
locateMeView.transform = CGAffineTransformMakeRotation(([CoreLocationController sharedInstance].heading - 45) * M_PI/180); 
locateMeView.center = CGPointMake(int)(self.view.bounds.size.width/2 + pos.x), (int)(self.view.bounds.size.height/2 + pos.y)); 

आशा है कि एक ही समस्या वाले किसी को मेरा जवाब मिलेगा।

+0

यह मुझे पागल कर रहा है। साझा करने के लिए धन्यवाद। – jamone

+0

जैसा वर्णन किया गया है [यहां] (http://iphonedevelopment.blogspot.co.uk/2008/10/demystifying-cgaffinetransform.html), आप 'सीमाएं 'संपत्ति का भी उपयोग कर सकते हैं। –

+5

दुर्भाग्य से यह विरूपण तब भी होता है जब आप फ्रेम या स्थिति को बदल नहीं रहे हैं। – Oscar

0

आकार बदलने के बाद परिवर्तन को सेट करने का प्रयास करें? आदेश परिवर्तन के साथ मामला हो सकता है।

+0

मैं सभी की कोशिश की विभिन्न आदेश, लेकिन जैसा कि आप कुछ और के बाद देख सकते हैं घंटों में मुझे समाधान मिला। –

+0

आप पर अच्छा है! इसे साझा करने के लिए धन्यवाद। –

6

एक अन्य समाधान:

  1. सेट पहचान करने के लिए बदलने
  2. बदलें फ्रेम
  3. सेट को बदलने

अपनी स्थिति में यह होना चाहिए:

locateMeView.transform = CGAffineTransformIdentity; 

CGRect frame = locateMeView.frame; 
CGPoint pos = [MapClass vectorForLocation:[CoreLocationController sharedInstance].location mapCenter:curLocation zoom:curZoom]; 
frame.origin.x = (int)(self.view.bounds.size.width/2 + pos.x - frame.size.width/2); 
frame.origin.y = (int)(self.view.bounds.size.height/2 + pos.y - frame.size.height/2); 
frame.size.width = 24; 
frame.size.height = 24; 
locateMeView.frame = frame; 

locateMeView.transform = CGAffineTransformMakeRotation(([CoreLocationController sharedInstance].heading - 45) * M_PI/180); 
+2

शुरुआत में पहचान पर ट्रांसफॉर्म सेट करने के लिए उत्कृष्ट सलाह। यह विशेष रूप से उपयोगी होता है यदि आप -आउटआउट दृश्यों और आपके लेआउट में परिवर्तन सेट कर रहे हैं। सबव्यूव्यू को दो बार बुलाया जा रहा है। – jonsibley

+0

बस एक ही पंक्ति को जोड़कर मेरी समस्या का पता लगाएंMeView.transform = CGAffineTransformIdentity; धन्यवाद –

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