我正在使用平移,捏合和旋转UIGestureRecognizers,以允许用户将某些UI元素准确放置在他们想要的位置.使用此处的代码http://www.raywenderlich.com/6567/uigesturerecognizer-tutorial-in-ios-5-pinches-pans-and-more(或类似的代码来自http://mobile.tutsplus.com/ tutorials/iphone/uigesturerecognizer /)都给了我用户根据需要放置这些UI元素所需的内容.
当用户退出"UI布局"模式时,我保存UIView的变换和中心,如下所示:
NSString *transformString = NSStringFromCGAffineTransform(self.transform);
[[NSUserDefaults standardUserDefaults] setObject:transformString forKey:@"UItransform", suffix]];
NSString *centerString = NSStringFromCGPoint(self.center);
[[NSUserDefaults standardUserDefaults] setObject:centerString forKey:@"UIcenter"];
Run Code Online (Sandbox Code Playgroud)
当我重新加载应用程序时,我阅读了UIView的转换和中心,如下所示:
NSString *centerString = [[NSUserDefaults standardUserDefaults] objectForKey:@"UIcenter"];
if( centerString != nil )
self.center = CGPointFromString(centerString);
NSString *transformString = [[NSUserDefaults standardUserDefaults] objectForKey:@"UItransform"];
if( transformString != nil )
self.transform = CGAffineTransformFromString(transformString);
Run Code Online (Sandbox Code Playgroud)
并且UIView最终旋转并正确缩放,但是在错误的地方.此外,在再次进入"UI布局"模式时,我不能总是用各种手势抓取视图(好像所显示的视图不是手势识别器所理解的视图?)
我还有一个重置按钮,可以将UIView设置为transform标识,并将其设置center为从NIB加载时的状态.但是在加载改变的UIView中心并进行转换后,即使重置也不起作用.UIView的立场是错误的.
我的第一个想法是,由于那些手势代码示例改变了center,旋转必须围绕不同的中心发生(假设一些不可预测的移动,旋转和音阶序列).因为我不想保存整个编辑序列(虽然如果我想在布局模式中有一些撤消功能,这可能很方便),我改变了UIPanGestureRecognizer处理程序以使用转换来移动它.一旦我开始工作,我想只是保存变换会得到我当前的位置和方向,无论事情发生的顺序.但没有这样的运气.我仍然以这种方式得到一个古怪的位置.
所以我很茫然.如果UIView已被移动并旋转到新位置,我该如何以稍后加载它的方式保存该位置和方向并将UIView恢复到应该的位置?
如果我没有标记这个权利或者没有正确地解决它或者犯了一些其他的stackoverflow罪,请提前道歉.这是我第一次在这里发布.
编辑
到目前为止,我正在尝试这两个建议.我认为它们实际上是相同的(一个建议保存框架,另一个建议保存原点,我认为是frame.origin).
所以现在来自prefs代码的保存/加载包括以下内容.
保存:
NSString *originString = NSStringFromCGPoint(self.frame.origin);
[[NSUserDefaults standardUserDefaults] setObject:originString forKey:@"UIorigin"];
Run Code Online (Sandbox Code Playgroud)
加载(加载转换前): …