我有一个UIViewController,其中包含许多子视图,如UILabels,UIImages和UIWebview。通过用户定义的操作,UIViewController的子视图将动画显示UIViewController视图中的不同大小和不同位置。是否可以通过用户使用不同的定义操作撤消此操作?我想让所有子视图恢复到以前在动画运行之前的位置和大小。我想到了两种可能的解决方案:
view.subviews()
方法获取子视图的属性,然后将动画后的子视图设置为此数组中的属性,或者这些是完成我想做的事情的正确方法吗?如果是这样,我将如何做到这一点? (我不知道如何以编程方式实现我的任何想法。)
非常感谢任何帮助。谢谢。
答案 0 :(得分:1)
Shape = new int[][] { virtualRow.ToArray() }
只要您想要将观看的视频网还原为初始值,请致电@interface ViewController ()
@property (strong, nonatomic) NSMutableArray *frames;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//Saving initial frames of all subviews
self.frames = [NSMutableArray new];
NSArray *allViews = [self allViewsOfView:self.view];
for (UIView *view in allViews) {
CGRect frame = view.frame;
NSValue *frameValue = [NSValue valueWithCGRect:frame];
[self.frames addObject:frameValue];
}
}
- (NSMutableArray *)allViewsOfView:(UIView *)view
{
NSMutableArray *result = [NSMutableArray new];
[result addObject:view];
for (UIView *subView in view.subviews) {
[result addObjectsFromArray:[self allViewsOfView:subView]];
}
return result;
}
- (void)resetFrames
{
NSArray *allViews = [self allViewsOfView:self.view];
for (UIView *view in allViews) {
NSValue *frameValue = [self.frames objectAtIndex:[allViews indexOfObject:view]];
CGRect frame = [frameValue CGRectValue];
view.frame = frame;
}
}
@end
。
答案 1 :(得分:0)
您可以在更改它并运行动画之前缓存所有子视图的帧,这样您甚至可以缓存多个动作。 stack结构将是完美的,但是在接口构建器中无法实现这一点,您必须引用从IB到代码的出口来获取它们的帧。