UIImageView通过startAnimating方法,播放经过CGImage翻转后的图像无效

发布于 2022-08-29 19:39:40 字数 795 浏览 28 评论 0

UIImageView通过startAnimating方法,播放经过CGImage翻转后的图像时,该图像全是原始图像,即旋转生成的UIImage的array在startAnimating无效。该怎么解决?

大家可以测试以下代码:

//TEST 
UIImageView* imageView = [[UIImageView alloc] initWithFrame:CGRectMake(30.0, 30.0, 50.0, 50.0)]; 
UIImage* image = [UIImage imageNamed:@"Image.png"]; 
UIImage* orientImage = [UIImage imageWithCGImage:image.CGImage scale:1.0 orientation:UIImageOrientationDownMirrored]; 

imageView.animationImages = [[NSArray alloc] initWithObjects:orientImage, orientImage, nil]; 
imageView.animationDuration = 0.3; 
imageView.animationRepeatCount = 10; 
[imageView startAnimating];

[self.view addSubview:imageView];

PS:这里的翻转不是旋转,是OrientationUpMirrored,就是水平翻转、左右方向换过来;这里说的动画,就是像UIImageView的startAnimating的精灵动画,不是UIView animation那种关键帧动画。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

昔日梦未散 2022-09-05 19:39:40

首先,

imageView.animationImages = [[NSArray alloc] initWithObjects:orientImage, orientImage, nil];

你不觉得两个对象是一样的?

其次,
你这个

 [UIImage imageWithCGImage:image.CGImage scale:1.0 orientation:UIImageOrientationDownMirrored];

创建出来的UIImage是不是和原图一样呢?

翻转的动画为什么不用CoreAnimation来实现呢?不需要用UIImageView的startAnimating

CALayer *layer = [CALayer layer]
// ... set bounds, position, etc.
layer.contents = [UIImage imageNamed:@"image"].CGImage;

[self.view.layer addSubLayer:layer];

CAKeyFrameAnimation *transformAnim = [CAKeyFrameAnimation animWithKeyPath:@"transform.rotation.x"];
// ... set duration, beginTime, etc.
transformAnim.keyTimes = @[@(0.0), @(1.0)];
transformAnim.values = @[(0.0), @(M_PI / 2)];
[layer addAnimation:transformAnim forKey:@"transform.rotation.x"];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文