imageView图片自动360旋转


imageView 中的图片自动360度旋转


#import "ViewController.h"


@interface ViewController ()


@property(nonatomic,strong)UIButton *btn;


@end


@implementation ViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    UIButton* btn = [[UIButtonalloc]init];

    btn.frame =CGRectMake(100,200, 100,40);

    [self.viewaddSubview:btn];

    btn.backgroundColor = [UIColorblackColor];

    [btn setTitle:@"更新"forState:UIControlStateNormal];

    [btn setImage:[UIImageimageNamed:@"更新"]forState:UIControlStateNormal];

    [btn addTarget:selfaction:@selector(startAnimate)forControlEvents:UIControlEventTouchUpInside];

    _btn = btn;

}

-(void)startAnimate

{

    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform" ];

    animation.fromValue = [NSValuevalueWithCATransform3D:CATransform3DIdentity];

    //围绕Z轴旋转,垂直与屏幕

    animation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI/2,0.0, 0.0,1.0) ];

    animation.duration =0.1;

    //旋转效果累计,先转180度,接着再旋转180度,从而实现360旋转

    animation.cumulative =YES;

    animation.repeatCount =1000;

    

    //在图片边缘添加一个像素的透明区域,去图片锯齿

    CGRect imageRrect =CGRectMake(0,0,_btn.imageView.frame.size.width,_btn.imageView.frame.size.height);

    UIGraphicsBeginImageContext(imageRrect.size);

    [_btn.imageView.imagedrawInRect:CGRectMake(1,1,_btn.imageView.frame.size.width-2,_btn.imageView.frame.size.height-2)];

    _btn.imageView.image =UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    [_btn.imageView.layeraddAnimation:animation forKey:nil];

}


-(void)stopAnimate

{

        [_btn.imageView.layerremoveAllAnimations];

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您可以使用Android中的属性动画来实现ImageView绕上边缘旋转的效果。具体步骤如下: 1. 创建一个AnimatorSet对象,用于组合动画。 2. 创建一个ObjectAnimator对象,用于实现旋转动画,并设置旋转的属性为rotation。 3. 创建一个Path对象,用于描述旋转的路径,路径的起点是ImageView的左上角,终点是ImageView的右上角。 4. 使用PathMeasure类获取Path对象的长度。 5. 创建一个ValueAnimator对象,用于实现动画的进度。 6. 在ValueAnimator的监听器中,获取当前进度所对应的点的坐标。 7. 计算ImageView需要旋转的角度,并将其设置为ObjectAnimator的属性值。 8. 将ObjectAnimator添加到AnimatorSet中,并启动AnimatorSet。 以下是示例代码: ``` AnimatorSet set = new AnimatorSet(); ObjectAnimator rotationAnimator = ObjectAnimator.ofFloat(imageView, "rotation", 0f, 360f); Path path = new Path(); path.moveTo(0, 0); path.lineTo(imageView.getWidth(), 0); PathMeasure measure = new PathMeasure(path, false); float pathLength = measure.getLength(); ValueAnimator progressAnimator = ValueAnimator.ofFloat(0f, 1f); progressAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float progress = (float) animation.getAnimatedValue(); float[] point = new float[2]; measure.getPosTan(progress * pathLength, point, null); float rotation = (float) Math.toDegrees(Math.atan2(point[1], point[0])); imageView.setRotation(rotation); } }); set.playTogether(rotationAnimator, progressAnimator); set.setDuration(2000); set.start(); ``` 请注意,此代码仅提供参考,具体实现可能需要根据您的需求进行更改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值