转换为 NSStringFromCGAffineTransform
我试图保存转换后的(旋转、缩放和移动)UIImageView
并将转换加载回屏幕,但它根本不起作用。每次我尝试时,UIImageView
都会位于应有的不同位置。
这里有一些代码:
保存到UserDefaults
:
NSUserDefaults * UserDefs = [NSUserDefaults standardUserDefaults];
UIImageView * petit = (UIImageView*)[ConView viewWithTag:1];
[UserDefs setBool:YES forKey:@"gespeichert"];
[UserDefs setObject:NSStringFromCGRect([petit frame]) forKey:@"frame"];
[UserDefs setObject:NSStringFromCGAffineTransform(petit.transform) forKey:@"position1"];
[UserDefs synchronize];
从UserDefaults加载:
CGAffineTransform transformation = CGAffineTransformFromString([UserDefs objectForKey:@"position1"]);
su.transform = transformation; // "su" is an UIImageView - allocated with Frame from:
CGRect RectFrame = CGRectFromString([UserDefs objectForKey:@"frame"]);
我做错了什么? 也许有人可以帮助我。
# # # # # # # # # # # # # # #
编辑: 我现在更改了代码: 用于加载
CGRect frameGroesse;
frameGroesse = CGRectFromString([UserDefs objectForKey:@"frame"]);
UIImageView * su = [[UIImageView alloc] initWithFrame:frameGroesse];
su.image = [UIImage imageNamed:@"Xcode.jpg"];
su.contentMode = UIViewContentModeScaleAspectFit;
su.multipleTouchEnabled = YES;
su.tag = 1;
[su setUserInteractionEnabled:YES];
[self addGestureRecognizersToPiece:su];
CGAffineTransform transformation = CGAffineTransformFromString([UserDefs objectForKey:@"position1"]);
su.transform = transformation;
su.center = CGPointFromString([UserDefs objectForKey:@"center"]);
[ConView addSubview:su];
[ConView bringSubviewToFront:su];
[ConView bringSubviewToFront:[ConView viewWithTag:1]];
[su release];
用于保存:
NSUserDefaults * UserDefs = [NSUserDefaults standardUserDefaults];
UIImageView * petit = (UIImageView*)[ConView viewWithTag:1];
[UserDefs setBool:YES forKey:@"gespeichert"];
[UserDefs setObject:NSStringFromCGRect([petit bounds]) forKey:@"frame"];
[UserDefs setObject:NSStringFromCGPoint(petit.center) forKey:@"center"];
[UserDefs setObject:NSStringFromCGAffineTransform(petit.transform) forKey:@"position1"];
[UserDefs synchronize];
但是加载图像后,我仍然有一个小动作。仍然需要一些帮助。
I am trying to save a transformed (rotated, scaled and moved) UIImageView
and load the transformations back to the screen but it doesn't work at all. Every time i try, the UIImageView
is on a different place as it should be.
Here some code:
Saving into UserDefaults
:
NSUserDefaults * UserDefs = [NSUserDefaults standardUserDefaults];
UIImageView * petit = (UIImageView*)[ConView viewWithTag:1];
[UserDefs setBool:YES forKey:@"gespeichert"];
[UserDefs setObject:NSStringFromCGRect([petit frame]) forKey:@"frame"];
[UserDefs setObject:NSStringFromCGAffineTransform(petit.transform) forKey:@"position1"];
[UserDefs synchronize];
Loading from UserDefaults:
CGAffineTransform transformation = CGAffineTransformFromString([UserDefs objectForKey:@"position1"]);
su.transform = transformation; // "su" is an UIImageView - allocated with Frame from:
CGRect RectFrame = CGRectFromString([UserDefs objectForKey:@"frame"]);
What did i wrong ?
Maybe some one can help me.
# # # # # # # # # # # # # # #
Edit:
I changed the code now:
For loading
CGRect frameGroesse;
frameGroesse = CGRectFromString([UserDefs objectForKey:@"frame"]);
UIImageView * su = [[UIImageView alloc] initWithFrame:frameGroesse];
su.image = [UIImage imageNamed:@"Xcode.jpg"];
su.contentMode = UIViewContentModeScaleAspectFit;
su.multipleTouchEnabled = YES;
su.tag = 1;
[su setUserInteractionEnabled:YES];
[self addGestureRecognizersToPiece:su];
CGAffineTransform transformation = CGAffineTransformFromString([UserDefs objectForKey:@"position1"]);
su.transform = transformation;
su.center = CGPointFromString([UserDefs objectForKey:@"center"]);
[ConView addSubview:su];
[ConView bringSubviewToFront:su];
[ConView bringSubviewToFront:[ConView viewWithTag:1]];
[su release];
For saving:
NSUserDefaults * UserDefs = [NSUserDefaults standardUserDefaults];
UIImageView * petit = (UIImageView*)[ConView viewWithTag:1];
[UserDefs setBool:YES forKey:@"gespeichert"];
[UserDefs setObject:NSStringFromCGRect([petit bounds]) forKey:@"frame"];
[UserDefs setObject:NSStringFromCGPoint(petit.center) forKey:@"center"];
[UserDefs setObject:NSStringFromCGAffineTransform(petit.transform) forKey:@"position1"];
[UserDefs synchronize];
But after loading the image, i still get a small movement. Still need some assistance please.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
CGAffineTransform 可能会使您应用变换的视图的框架属性无效,因此也许您没有存储有用的框架...
The CGAffineTransform may invalid the frame property of the view you apply the transform, so maybe you are not storing a usefull frame...
您不应将
transform
、bounds
和center
与frame
混合使用。例如,为视图设置transform
将影响其框架。至于你的UIImageView
:它在超级视图中的位置应该由它的center
定义。它的旋转/缩放应该由transform
定义(为了简单起见,不要将翻译放在变换中)。大小应由bounds.size 定义。因此,您必须存储三件物品。You should not mix
transform
,bounds
, andcenter
withframe
. For example, settingtransform
to a view will affect its frame. As for yourUIImageView
: its position in superview should be defined by itscenter
. Its rotation/scale should be defined bytransform
(don't put translations in transform for simplicity). The size should be defined bybounds.size
. So, you have to store three items.