IIImage को आईओएस पर एनिमेशन का उपयोग करके 180 डिग्री से अधिक देखें

मैं 180 डिग्री से अधिक घूर्णन करके एक चलती मीटर को एनिमेट करने की कोशिश कर रहा हूं, लेकिन यह काम नहीं करेगा। मैं मीटर को घुमाने के लिए CGAffineTransform का उपयोग कर रहा हूं, जो घूर्णन करने के लिए शुद्ध परिणाम का उपयोग करता है। इसका मतलब यह है कि मैं इस फ़ंक्शन का उपयोग करते समय सीडब्ल्यू या सीसीडब्ल्यू रोटेशन का चयन नहीं कर सकता। मैं इस कोड को 4 रेडियंस घुमाने के लिए कैसे संशोधित कर सकता हूं। वर्तमान में रोटेशन को नेट परिणाम में बदल दिया गया है, जिससे रोटेशन कम हो जाता है।

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.25]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
CGAffineTransform transform = CGAffineTransformMakeRotation(4);
self.meter.transform = transform;
[UIView commitAnimations];

संपादित करें: उत्तरों से मैं इसे करने के द्वारा काम करने में कामयाब रहा

 [UIView animateWithDuration:1.5 animations:^{
    CABasicAnimation *fullRotation;
    fullRotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
    fullRotation.fromValue = [NSNumber numberWithFloat:0];
    fullRotation.toValue = [NSNumber numberWithFloat:((330*M_PI)/180)];
    fullRotation.duration = 2.0f;
    fullRotation.repeatCount = 1;
    fullRotation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    fullRotation.fillMode = kCAFillModeForwards;
    fullRotation.removedOnCompletion = NO;

   //add animation in your view
    [self.meter.layer addAnimation:fullRotation forKey:@"330"];
    [self performSelector:@selector(stopRotate:) withObject:self.meter afterDelay:2.0];
}];
1
जोड़ा संपादित
विचारों: 1

3 उत्तर

आपको निम्नलिखित मैक्रो का उपयोग करके रेडियन को डिग्री में बदलने की आवश्यकता है:

#define RADIANS_TO_DEGREES(radians) ((radians) * (180.0/M_PI))

और फ़ंक्शन को मान पास करें:

-(UIImage*)rotateImage:(UIImage*)img forAngle:(CGFloat)degree   {

UIView *rotatedViewBox = [[UIView alloc]initWithFrame:CGRectMake(0, 0, img.size.width, img.size.height)];
CGAffineTransform t = CGAffineTransformMakeRotation(degree);
rotatedViewBox.transform = t;
CGSize rotatedSize = rotatedViewBox.frame.size;

UIGraphicsBeginImageContext(rotatedSize);

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, rotatedSize.width, rotatedSize.height);
CGContextRotateCTM(context, radian);
CGContextScaleCTM(context, 1.0, -1.0);

CGContextDrawImage(context, CGRectMake(-img.size.width, -img.size.height, img.size.width, img.size.height), img.CGImage);
UIImage *returnImg = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();
return returnImg;
}
0
जोड़ा
@ ज़ीज़र ने काम किया, मैंने परीक्षण किया है। क्या आप अपना कोड पोस्ट कर सकते हैं। आप इसका उपयोग कैसे कर रहे हैं?
जोड़ा लेखक Vinay Jain, स्रोत
@ ज़ीज़र मैंने इसे ठीक कर दिया है।
जोड़ा लेखक Vinay Jain, स्रोत
काम नहीं लगता है। कुछ भी नहीं होता जब मैं इस छवि में अपनी छवि में भेजता हूं। मैं इसे इस तरह भेज रहा हूं: self.meter.image
जोड़ा लेखक Zeezer, स्रोत

इसे आज़माएं, अपनी आवश्यकताओं से मेल खाने के लिए केवल मूल गुणों को बदलें:

    CATransform3D rotationTransform = CATransform3DMakeRotation(((4) * (180.0/M_PI)), 0, 0, 1.0);

    CABasicAnimation* rotationAnimation;
    rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform"];
    rotationAnimation.toValue = [NSValue valueWithCATransform3D:rotationTransform];
    rotationAnimation.duration = 0.6f;
    rotationAnimation.cumulative = YES;
    rotationAnimation.repeatCount = 1;

    //Add this two lines
    rotationAnimation.fillMode = kCAFillModeForwards;
    rotationAnimation.removedOnCompletion = NO;

    [self.meter.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];

मुझे बताएं कि यह आपके लिए काम करता है।

0
जोड़ा
यह 4 रेडियंस घुमाए नहीं, और घूर्णन पूरा होने के बाद छवि अपनी मूल स्थिति में लौट आई।
जोड़ा लेखक Zeezer, स्रोत
यह वास्तव में काम नहीं करता है, क्योंकि यह सबसे छोटा रास्ता चुनता है। लेकिन मैं इसे दोहराने के द्वारा संशोधित कर सकता हूं, तो धन्यवाद। क्या मैं आसानी से इसका उपयोग कर सकता हूं? यह सिर्फ एक रैखिक एनीमेशन है, मैं इसे अपने उदाहरण में चिकनी बनाना चाहता हूं।
जोड़ा लेखक Zeezer, स्रोत
Easyinandout का उपयोग करने का प्रयास किया, लेकिन फिर मुझे दोहराने की आवश्यकता है। गणना 1 पर सेट है और इसके परिणामस्वरूप अधिकतम 180 डिग्री एनीमेशन होता है
जोड़ा लेखक Zeezer, स्रोत
मैंने उपरोक्त कोड संपादित किया।
जोड़ा लेखक Greg, स्रोत

// हेडर उपसर्ग में इसे जोड़ें

 #define MAXFLOAT    0x1.fffffep+127f

// रोटेशन के लिए जोड़ें

 [UIView animateWithDuration:1.5 animations:^{
      CABasicAnimation *fullRotation;
    fullRotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
    fullRotation.fromValue = [NSNumber numberWithFloat:0];
    fullRotation.toValue = [NSNumber numberWithFloat:(2*M_PI))];
    fullRotation.duration =1.0f;
    fullRotation.repeatCount = MAXFLOAT;
   //add animation in your view
    [yourView.layer addAnimation:fullRotation forKey:@"360"];
    [self performSelector:@selector(stopRotate:) withObject:yourView afterDelay:1.0];
}];

और दृश्य से रोटेशन रोकने के लिए इस कोड को जोड़ें

-(void)stopRotate :(UIView *)yourView
{
  [yourView.layer removeAnimationForKey:@"360"];
}
0
जोड़ा
यह उत्तर ठीक से काम नहीं करता है, लेकिन मैं इसे संपादित करके काम करने में कामयाब रहा, मेरा संपादन देखें।
जोड़ा लेखक Zeezer, स्रोत