我正在尝试移动和旋转UIImageView。我没有使用Core Animation,也没有使用它。
顺便说一下,动画的核心部分如下:
CGRect r = self.frame;
r.origin.y -= self.gravity + spring;
r.origin.x -= 1;
self.rotation -= 0.015;
self.transform = CGAffineTransformMakeRotation(rotation);
self.frame = r;
它几乎可以工作。我确实移动了它或者它旋转,但当我尝试移动并旋转它时,它会完全扭曲变形。
我试图移动然后旋转而反之亦然。我也尝试了内容模式的各种值,没有运气。有什么帮助吗?
修改
有用的教程:http://www.permadi.com/blog/2009/05/iphone-sdk-bouncing-and-rotating-ball-example/
答案 0 :(得分:2)
如果没有您所看到的图片,很难确定会发生什么,但以下内容可能会有用:
将旋转应用于视图时,它会将其旋转(0,0),因此您需要确保设置视图的边界,以便(0,0)是您想要旋转中心的位置。假设您正在旋转的图像是100x200图像,并且您想围绕图像的中心旋转,那么您需要说self.bounds = CGMakeRect(-50, -100, 100, 200);
如果您不这样做,它将围绕它的左上角旋转进行排序螺旋状。
哦,使用self.center
设置视图的位置似乎比使用self.frame
时更加可预测。
这是一些可能使其更容易理解的演示代码。在这种情况下,执行动画的代码是视图控制器,但您应该明白这一点:
#define USE_SELF_CENTER 0
- (void)viewDidLoad {
[super viewDidLoad];
self.rotation = 0.0f;
self.translation = CGPointMake(self.view.bounds.size.width/2.0f, 0.0);
ObjectView* ov = [[ObjectView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 100.0f, 100.0f)];
#if USE_SELF_CENTER==1
ov.center = self.translation;
#else
ov.transform = CGAffineTransformMakeTranslation(self.translation.x, self.translation.y);
#endif
// adjust bounds for center of rotation
ov.bounds = CGRectMake(-50.0f, -50.0f, 100.0f, 100.0f);
[self.view addSubview:ov];
self.objectView = ov;
[ov release];
NSTimer *aTimer = [NSTimer timerWithTimeInterval:0.5 target:self selector:@selector(nextFrame)
userInfo:nil repeats:YES];
self.timer = aTimer;
[aTimer release];
[[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
}
- (void)nextFrame
{
NSLog(@"nextFrame");
self.rotation += (5.0 / 180.0f * M_PI);
self.translation = CGPointMake(self.translation.x, self.translation.y + 2.0);
#if USE_SELF_CENTER==1
CGAffineTransform t = CGAffineTransformMakeRotation(self.rotation);
self.objectView.center = self.translation;
self.objectView.transform = t;
#else
CGAffineTransform rot = CGAffineTransformMakeRotation(self.rotation);
CGAffineTransform txy = CGAffineTransformMakeTranslation(self.translation.x, self.translation.y);
CGAffineTransform t = CGAffineTransformConcat(rot, txy);
self.objectView.transform = t;
#endif
}
该代码演示了两种实现您想要的方法。如果USE_SELF_CENTER
为零,则所有动画都通过变换完成。如果USE_SELF_CENTER
非零,则使用变换进行旋转,并通过设置视图的中心来完成平移。
答案 1 :(得分:1)
使用这样的东西,这个想法结合了转换,即
CGAffineTransform transforms = CGAffineTransformConcat(CGAffineTransformMakeTranslation(-1, -(self.gravity + spring)),CGAffineTransformMakeRotation(rotation));
self.transform = transforms;
希望这会奏效
答案 2 :(得分:0)
Hello Friend请使用此步骤。在您的XIB上,使用UIImageView并设置Image并设置其IBOutlet。
在.h文件中
int theta;
NSTimer *tmrAnimation;
IBOutlet UIImageView *imgViewLoader;
在.m文件中
- (void)viewDidLoad
{
[super viewDidLoad];
theta = 0;
tmrAnimation = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(animationImageViewLoader) userInfo:nil repeats:YES];
}
在.m文件中添加此功能。
-(void)animationImageViewLoader
{
CGFloat angle = theta * (PI / 100);
CGAffineTransform transform = CGAffineTransformMakeRotation(angle);
theta = (theta + 1) % 200;
imgViewLoader.transform = transform;
}
此代码仅对图像旋转有帮助....
答案 3 :(得分:0)
以下代码帮助我实现了翻译(垂直移动)和旋转。
CGAffineTransform transform = CGAffineTransformMakeTranslation(0, -200);
transform = CGAffineTransformRotate(transform, M_PI);
[UIView transitionWithView:self
duration:0.5
options:UIViewAnimationOptionAllowAnimatedContent<br>
animations:^{
[view setTransform:transform];
}
completion:^(BOOL finished){
}];
[UIView transitionWithView:self
duration:0.5
options:UIViewAnimationOptionAllowAnimatedContent<br>
animations:^{
[view setTransform:transform];
}
completion:^(BOOL finished){
}];
希望这会帮助别人......