我是Objective-c的新手,我想在屏幕上添加一个图像,像在AS3中一样补间,在围绕自己的中心点旋转的同时将其从一端移动到另一端。
我试过
[UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
// TRANSFORM SCREENSHOT
screenShotView.transform = CGAffineTransformRotate(screenShotView.transform, -M_PI * 0.05);
screenShotView.transform = CGAffineTransformScale(screenShotView.transform, 0.6, 0.6);
screenShotView.transform = CGAffineTransformTranslate(screenShotView.transform,
self.webView.frame.origin.x,
self.webView.frame.origin.y - self.webView.frame.size.height * 0.3
);
但是使用此代码,图像围绕TransformIdentity的中心旋转。因此,旋转和移动时旋转失控,图像并不完全处于我喜欢的位置。
同时旋转和平移的正确方法是什么,将旋转中心与图像进行平移?
并且至少在转换后我想在图像的右上角添加一个关闭按钮。为此,我也需要角落的新坐标。
日Thnx!
答案 0 :(得分:16)
我现在以下面的代码结束了,但我仍然不知道这是否是最先进的解决方案。
CGAffineTransform translate = CGAffineTransformMakeTranslation(self.webView.frame.origin.x,self.webView.frame.origin.y - self.webView.frame.size.height * 0.25);
CGAffineTransform scale = CGAffineTransformMakeScale(0.6, 0.6);
CGAffineTransform transform = CGAffineTransformConcat(translate, scale);
transform = CGAffineTransformRotate(transform, degreesToRadians(-10));
[UIView beginAnimations:@"MoveAndRotateAnimation" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:2.0];
screenShotView.transform = transform;
[UIView commitAnimations];
答案 1 :(得分:7)
IOS 7的首选方法是使用块对象。与“老式”动画方式相比,它有几个优点。特别是它可以利用多核和视频协同处理。此外,“内置”回调部分(完成部分)非常有用,因为它可以根据需要保留任何必要的状态信息和指向对象的链接。
CGAffineTransform translate = CGAffineTransformMakeTranslation(self.webView.frame.origin.x,self.webView.frame.origin.y - self.webView.frame.size.height * 0.25);
CGAffineTransform scale = CGAffineTransformMakeScale(0.6, 0.6);
CGAffineTransform transform = CGAffineTransformConcat(translate, scale);
transform = CGAffineTransformRotate(transform, degreesToRadians(-10));
// animation using block code
[UIView animateWithDuration:2.0
delay:0.0
options:UIViewAnimationOptionCurveEaseIn
animations:^{
screenShotView.transform = transform;
}completion:^(BOOL finished){
// do something if needed
}];