переместить изображение в круговое направление - PullRequest
0 голосов
/ 13 декабря 2011
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
CGRect frame = [button frame];
button.layer.anchorPoint = CGPointMake(0.5, 0.5);
button.layer.position = CGPointMake(frame.origin.x + 0.5 * frame.size.width, frame.origin.y + 0.5 * frame.size.height);
[CATransaction commit];

[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanFalse forKey:kCATransactionDisableActions];
[CATransaction setValue:[NSNumber numberWithFloat:2.0] forKey:kCATransactionAnimationDuration];

CABasicAnimation *animation;
animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
animation.fromValue = [NSNumber numberWithFloat:0.0];
animation.toValue = [NSNumber numberWithFloat:2 * M_PI];
animation.timingFunction = [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionLinear];
animation.delegate = self;
[button.layer addAnimation:animation forKey:@"rotationAnimation"];

[CATransaction commit];

Я попробовал этот код, но он бесполезен. Я хочу переместить изображение в круговой траектории

Ответы [ 2 ]

2 голосов
/ 08 марта 2016

Пожалуйста, проверьте этот код для движущегося изображения ... Спасибо

    UIBezierPath *customPath =[self createArcPath];

    UIImage *movingImage = [UIImage imageNamed:@"Unchecked.png"];
    CALayer *movingLayer = [CALayer layer];
    movingLayer.contents = (id)movingImage.CGImage;
    movingLayer.anchorPoint = CGPointZero;
    movingLayer.frame = CGRectMake(0.0f, 0.0f, movingImage.size.width, movingImage.size.height); // image position starting 
    [self.view.layer addSublayer:movingLayer];

    CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
    pathAnimation.duration = 4.0f;
    pathAnimation.path = customPath.CGPath;
    pathAnimation.calculationMode = kCAAnimationLinear;
    [movingLayer addAnimation:pathAnimation forKey:@"movingAnimation"];

}
  - (UIBezierPath *)createArcPath
    {
        UIBezierPath *aPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(150, 150)
                                                             radius:10
                                                         startAngle:0
                                                           endAngle:2* M_PI
                                                          clockwise:YES];
        return aPath;
    }
1 голос
/ 13 декабря 2011

Анимация, которую вы хотите, может быть выполнена без использования класса CAAnimation.

Используйте следующий код внутри объекта NSTimer.

Создайте цикл, внутри которого переменная угла начинается с 0 добесконечность или кратная 360.

// radius - это радиус круга, в который вы хотите переместить ImageView.

myImageView.center = CGPointMake(myImageView.center.x + cos(angle) * radius, myImageView.center.y + sin (angle) * radius);
...