gpt4 book ai didi

ios - 重绘 UIViewController 及其 subview

转载 作者:行者123 更新时间:2023-11-29 01:55:24 32 4
gpt4 key购买 nike

我有一个 UIViewController,它有许多 subview ,如 UILabels、UIImages 和 UIWebview。通过用户定义的操作,UIViewController 的 subview 在 UIViewController View 内以不同的大小和不同的位置进行动画处理。是否可以通过用户定义的不同操作来撤消此操作?我想让所有 subview 恢复到它们在动画运行之前的位置和大小。我想到了两种可能的解决方案:

  1. 在动画运行前通过view.subviews()方法获取 subview 的属性,然后在动画运行后将 subview 设置为这个数组中的属性,或者,
  2. 在 UIViewController 上调用一个方法,告诉它根据 Storyboard 文件中设置的属性重绘所有 subview 。

这些是完成我想做的事情的正确方法吗?如果是这样,我将如何去做呢? (我不知道如何以编程方式实现我的任何一个想法。)

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

最佳答案

这是解决方案。

@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

每当您想将 View 的帧恢复为初始值时调用[self resetFrame];

关于ios - 重绘 UIViewController 及其 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30923444/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com