छवियों के निम्नलिखित प्रगति पर एक नज़र डालें:
दृश्य परिवर्तन की कमी को कम करने के लिए CATransform3D का उपयोग करके यह परिवर्तन क्यों है?
यहाँ क्या हो रहा है पहले मैं "बेसबॉल" चयनित, 3 ग्रे बार देखा गया हो, ताकि आप के साथ एक छोड़ दिया बारी बारी से करने को देखने के कारण है विभिन्न स्तर मध्य में हैं (दूसरी छवि)। आप देख सकते हैं कि इस बिंदु पर पहले से ही दृश्य की चौड़ाई काफी कम हो गई है। तीसरी छवि खेल के नाम वाले दृश्य पर क्लिक करने के बाद होती है, जिससे इसे बीच में घुमाया जाता है।
जो मैं कह सकता हूं उससे, दृश्य में चौड़ाई कम हो जाती है जब यह बीच में घूमती है। लेकिन मुझे नहीं पता कि क्यों।
यहां प्रासंगिक कोड है। pos
बताता है कि प्रश्न में view
कहां स्थित है। 0
इंगित करता है कि यह बीच में है, 1
इंगित करता है कि यह बीच के अधिकार के लिए एक है, -1
, मध्य के बाईं ओर से एक है आदि
- (void)perspectiveView:(MenuSection *)view forPosition:(NSInteger)pos
{
CALayer *layer = view.layer;
CATransform3D transform = CATransform3DIdentity;
MenuSection *prevView = (pos >= 0) ? (MenuSection *)[self viewWithTag:view.tag - 1] : (MenuSection *)[self viewWithTag:view.tag + 1];
if (pos == 0) {
view.changingToFrame = CGRectMake(round((480 - view.frame.size.width)/2), view.frame.origin.y, view.frame.size.width, view.frame.size.height);
view.frame = view.changingToFrame;
} else {
if (pos == 1) {
NSLog(@"%@",NSStringFromCGRect(prevView.changingToFrame));
view.changingToFrame = CGRectMake(round(prevView.changingToFrame.origin.x + prevView.frame.size.width + 20), view.frame.origin.y, view.frame.size.width, view.frame.size.height);
transform.m34 = 1.0/1000;
} else if (pos == -1){
view.changingToFrame = CGRectMake(round(prevView.changingToFrame.origin.x - view.frame.size.width - 20), view.frame.origin.y, view.frame.size.width, view.frame.size.height);
transform.m34 = 1.0/-1000;
} else if (pos == 2){
view.changingToFrame = CGRectMake(round(prevView.changingToFrame.origin.x + prevView.frame.size.width + 20), view.frame.origin.y, view.frame.size.width, view.frame.size.height);
transform.m34 = 1.0/500;
} else if (pos == -2){
view.changingToFrame = CGRectMake(round(prevView.changingToFrame.origin.x - view.frame.size.width - 20), view.frame.origin.y, view.frame.size.width, view.frame.size.height);
transform.m34 = 1.0/-500;
}
view.frame = view.changingToFrame;
transform = CATransform3DRotate(transform, 45.0f * M_PI/180.0f, 0.0f, 1.0f, 0.0f);
}
layer.transform = transform;
}
मैंने ज़ेड अक्ष ट्रांसफॉर्म की थोड़ी सी मात्रा जोड़कर इसे हल किया। यह हमेशा काम नहीं करता है, और यदि गलत किया जाता है, तो y = x अक्ष के साथ आपका दृश्य गुना होगा। – CodaFi
के लिए transform.m34 क्या है? मैंने इस तरह के विचारों को चौड़ाई के बिना कभी घुमाया है। सुनिश्चित नहीं है कि क्या हो रहा है ... – bentford
मुझे इस पोस्ट से ट्रांसफॉर्म कोड मिला: http://stackoverflow.com/questions/347721/how-do-i-apply-a-perspective-transform-to-a-uiview। क्या आप विचारों को घुमाने के लिए एक कोड उदाहरण प्रदान कर सकते हैं? अगर मैं transform.m34 स्टेटमेंट को हटा देता हूं, तो मैं इस तरह दिखने वाले ट्रांसफॉर्म के साथ समाप्त होता हूं: http://cl.ly/2Z0v0P1U1T2a1p240x3L – maxedison