转换为 NSStringFromCGAffineTransform

发布于 2024-12-17 11:22:50 字数 2263 浏览 3 评论 0原文

我试图保存转换后的(旋转、缩放和移动)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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

花期渐远 2024-12-24 11:22:50

CGAffineTransform 可能会使您应用变换的视图的框架属性无效,因此也许您没有存储有用的框架...

The CGAffineTransform may invalid the frame property of the view you apply the transform, so maybe you are not storing a usefull frame...

满身野味 2024-12-24 11:22:50

您不应将 transformboundscenterframe 混合使用。例如,为视图设置 transform 将影响其框架。至于你的UIImageView:它在超级视图中的位置应该由它的center定义。它的旋转/缩放应该由 transform 定义(为了简单起见,不要将翻译放在变换中)。大小应由bounds.size 定义。因此,您必须存储三件物品。

You should not mix transform, bounds, and center with frame. For example, setting transform to a view will affect its frame. As for your UIImageView: its position in superview should be defined by its center. Its rotation/scale should be defined by transform (don't put translations in transform for simplicity). The size should be defined by bounds.size. So, you have to store three items.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文