iOS 如何为旋转、缩放和将 UIView 添加到 UIIMageView 进行撤消操作
Posted
技术标签:
【中文标题】iOS 如何为旋转、缩放和将 UIView 添加到 UIIMageView 进行撤消操作【英文标题】:iOS how can I make undo action for rotating, scaling and adding UIView to UIIMageView 【发布时间】:2016-06-22 08:12:46 【问题描述】:我有一个UIImageView
,我可以向这个UIImageView
添加新项目(作为子视图),或者我可以移动和旋转UIImageView
中的项目。
我正在尝试对此项目进行撤消操作,所以我的代码;
在每个新操作之前,我都会获取UIImageView
的副本并将它们存储在NSMutableArray
中
[self.lastActions addObject:[self getCopy]];
我得到了具有不同内存地址的相同 UIImageView。 (我不确定这是不是正确的方法)
-(UIImageView *)getCopy
NSData *archivedViewData = [NSKeyedArchiver archivedDataWithRootObject:self.imageView];
id clone = [NSKeyedUnarchiver unarchiveObjectWithData:archivedViewData];
return clone;
当我撤消时;
-(IBAction)undoButtonClicked:(id)sender
UIImageView *lastImageView = [self.lastActions lastObject];
[UIView animateWithDuration:0.1 animations:^
self.imageView = lastImageView;
];
[self.lastActions removeObject:lastImageView];
但它不会改变屏幕上的 UIImageView。 对我的代码有什么问题有任何想法吗?
【问题讨论】:
我认为主要的UIImageView
即self.imageView
已经改变了转换,试试这个self.imageView.transform=CGAffineTransformIdentity;
然后self.imageView.transform= lastImageView.transform
;
你的需求是什么?更改图像或图像视图
@iphonic 我尝试了,但它不起作用
我正在尝试将这个“self.ImageView”从视图中虚拟删除。第一次只复制了图像,第二次我们无法检索图像视图。
【参考方案1】:
我正在尝试您的上述想法。无法获得输出。这是实现相同目标的另一个想法。 我正在使用图像来显示同一图像视图“撤消”操作上的图像更改。我已经实现了如下方法。
它在我身边工作正常。 我希望这会对我们有所帮助。
// 撤消按钮操作
-(IBAction)undoButtonClicked:(id)sender
UIImage *lastImageView = lastImageView = (UIImage *)[lastActions lastObject];
if( [lastActions count]!=0)
[UIView animateWithDuration:0.2 animations:^
self.imageView.image = lastImageView;
];
[lastActions removeObject:lastImageView];
// 从公共变量 self.imageview 复制图像
-(IBAction)copyButton:(id)sender
[lastActions addObject:self.imageView.image];
// 随机改变方向以旋转图像。
-(UIImageOrientation )randonImageOrientation
int min = 0 ;
int max = 3;
UIImageOrientation ori;
int randomNumber = min + rand() % (max-min);
switch (randomNumber)
case 0 :
ori = UIImageOrientationDown;
break;
case 1:
ori = UIImageOrientationLeft;
break;
case 2:
ori = UIImageOrientationRight;
break;
case 3:
ori = UIImageOrientationUp;
break;
default :
ori = UIImageOrientationUp;
break;
return ori;
//下面使用旋转图像的方法
-(UIImage *)imageOrientation :(UIImageOrientation)imageOri image:(UIImage *)oriImage
UIImage * LandscapeImage = oriImage;
UIImage * PortraitImage = [[UIImage alloc] initWithCGImage: LandscapeImage.CGImage
scale: 0.5
orientation: imageOri];
return PortraitImage;
【讨论】:
以上是关于iOS 如何为旋转、缩放和将 UIView 添加到 UIIMageView 进行撤消操作的主要内容,如果未能解决你的问题,请参考以下文章
iOS Swift:无需调整大小即可旋转和缩放 UIView