重绘UIViewController及其子视图

时间:2015-06-18 18:50:31

标签: ios xcode uiview uiviewcontroller storyboard

我有一个UIViewController,其中包含许多子视图,如UILabels,UIImages和UIWebview。通过用户定义的操作,UIViewController的子视图将动画显示UIViewController视图中的不同大小和不同位置。是否可以通过用户使用不同的定义操作撤消此操作?我想让所有子视图恢复到以前在动画运行之前的位置和大小。我想到了两种可能的解决方案:

  1. 在运行动画之前使用view.subviews()方法获取子视图的属性,然后将动画后的子视图设置为此数组中的属性,或者
  2. 在UIViewController上调用一个方法,告诉它根据storyboard文件中设置的属性重绘所有子视图。
  3. 这些是完成我想做的事情的正确方法吗?如果是这样,我将如何做到这一点? (我不知道如何以编程方式实现我的任何想法。)

    非常感谢任何帮助。谢谢。

2 个答案:

答案 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到代码的出口来获取它们的帧。