2012-07-02 25 views
7

दृश्य दोनों एक फ्रेम (superview के समन्वय प्रणाली में निर्देशांक) गुना (खुद समन्वय प्रणाली में निर्देशांक) संपत्ति है, लेकिन अगर आप एक दृश्य को बदलने के लिए, आप का उपयोग करें या अब और फ्रेम संपत्ति पर भरोसा नहीं करना चाहिए। आप परिवर्तनों का उपयोग कर रहे हैं, तो सीमा के साथ, केवल संपत्ति, नहीं फ्रेम ठीक से काम कर के रूप में परिवर्तनों सीमा को लागू किए जाते हैं, लेकिन जरूरी नहीं कि फ्रेम मेंCGAffineTransform view.bounds बदलता है?

http://iphonedevelopment.blogspot.jp/2008/10/demystifying-cgaffinetransform.html

मैं चाहता था सही रूप में प्रतिबिंबित नहीं होते हैं यह देखने के लिए कि उपरोक्त अनुच्छेद में क्या मतलब है और मुद्रित 'फ्रेम' और 'सीमाएं'
और मुझे लगता है कि चुटकी के दौरान केवल 'फ्रेम' बदल रहा है।

- (IBAction)handlePinch:(UIPinchGestureRecognizer*)recognizer 
{ 
    NSLog(@"scale: %f, velocity: %f", recognizer.scale, recognizer.velocity); 
    NSLog(@"Before, frame: %@, bounds: %@", NSStringFromCGRect(recognizer.view.frame), NSStringFromCGRect(recognizer.view.bounds)); 
    recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale); 
    NSLog(@"After, frame: %@, bounds: %@", NSStringFromCGRect(recognizer.view.frame), NSStringFromCGRect(recognizer.view.bounds)); 

    recognizer.scale = 1; 
} 

उत्पादन: (में zomming)

2012-07-02 14:53:51.458 GestureRec[1264:707] scale: 1.030111, velocity: 0.945660 
2012-07-02 14:53:51.466 GestureRec[1264:707] Before, frame: {{0, 124}, {320, 160}}, bounds: {{0, 0}, {320, 160}} 
2012-07-02 14:53:51.473 GestureRec[1264:707] After, frame: {{-4.81771, 121.591}, {329.635, 164.818}}, bounds: {{0, 0}, {320, 160}} 
2012-07-02 14:53:51.480 GestureRec[1264:707] scale: 1.074539, velocity: 1.889658 
2012-07-02 14:53:51.484 GestureRec[1264:707] Before, frame: {{-4.81771, 121.591}, {329.635, 164.818}}, bounds: {{0, 0}, {320, 160}} 
2012-07-02 14:53:51.494 GestureRec[1264:707] After, frame: {{-17.103, 115.449}, {354.206, 177.103}}, bounds: {{0, 0}, {320, 160}} 
2012-07-02 14:53:51.499 GestureRec[1264:707] scale: 1.000000, velocity: 1.889658 
2012-07-02 14:53:51.506 GestureRec[1264:707] Before, frame: {{-17.103, 115.449}, {354.206, 177.103}}, bounds: {{0, 0}, {320, 160}} 
2012-07-02 14:53:51.510 GestureRec[1264:707] After, frame: {{-17.103, 115.449}, {354.206, 177.103}}, bounds: {{0, 0}, {320, 160}} 

मैं कुछ या लेखक गलतफहमी हूँ में ब्लॉग गलत क्या है?

+0

क्या आप ट्रांसफॉर्म से पहले और बाद में दोनों मानों को लॉग कर सकते हैं, और उस पैमाने के मूल्य को भी लॉग कर सकते हैं जिसका आप उपयोग कर रहे हैं? और वास्तव में अपने प्रश्न में आउटपुट शामिल करें :) – jrturton

+0

@jrturton: निश्चित, संपादित – eugene

उत्तर

5

मुझे लगता है कि मुझे मिल गया:

ब्लॉग, सही है भी Apple themselves के अनुसार:

अनुवाद या समन्वय प्रणाली पैमाने पर करने के लिए आप को देखने के सीमा आयत बदल ...

हालांकि सीमाएं बदलती नहीं हैं क्योंकि आयताकार स्वयं अभी भी वही आकार है जिसकी आपने रिपोर्ट की है, केवल समन्वय प्रणाली इसके साथ स्केल की गई है। आप देखते हैं:

सीमा आयत बदलना के साथ मूल समन्वय प्रणाली सेट करता है जो दृश्य द्वारा किए गए सभी चित्रों से शुरू होता है।

और क्योंकि हम कभी भी सीमाओं को स्पष्ट रूप से नहीं बदलते हैं, केवल दृश्य के फ्रेम को इसके पर्यवेक्षण परिवर्तनों के सापेक्ष बदलते हैं।

असल में, मैं गणितीय रूप से सीमाओं को कभी भी परिवर्तित नहीं कर सकता! इधर, इस नमूने के बजाय चलाएँ:

NSLog(@"scale: %f, velocity: %f", recognizer.scale, recognizer.velocity); 
    NSLog(@"Before, frame: %@, bounds: %@", NSStringFromCGRect(recognizer.view.frame), NSStringFromCGRect(recognizer.view.bounds)); 
    recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale); 
    NSLog(@"After, frame: %@, bounds: %@ transform:%@", NSStringFromCGRect(recognizer.view.frame), NSStringFromCGRect(recognizer.view.bounds), NSStringFromCGAffineTransform(recognizer.view.transform)); 

    recognizer.scale = 1; 

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

एक दिलचस्प conundrum, अगर मैं खुद ऐसा कहता हूं।

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

  • कोई संबंधित समस्या नहीं^_^