2011-11-22 26 views
0

我試圖保存轉換(旋轉,縮放和移動)UIImageView並將轉換加載回屏幕,但根本不起作用。每當我嘗試,UIImageView是在不同的地方,因爲它應該是。轉換爲NSStringFromCGAffineTransform

這裏是一些代碼:從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]; 

但加載圖像後,我仍然得到一個小動作。請仍需要一些幫助。

回答

0

的CGAffineTransform可能無效應用轉換的視圖的框架屬性,所以也許你沒有存儲有用的框架...

0

你不應該混合transformbounds,並且centerframe。例如,將transform設置爲一個視圖將影響其框架。至於你的UIImageView:它在superview中的位置應該由其center定義。它的旋轉/縮放應該由transform定義(爲簡單起見,不要在轉換中使用翻譯)。尺寸應該由bounds.size定義。所以,你必須存儲三個項目。

+0

你好。感謝您的回答。我將我的代碼更改爲界限並添加了中心。但仍然沒有得到我想要的結果。你可能有一個小例子嗎? – Alex

+0

當然,但首先解釋什麼是「我希望的結果」。記下你的代碼,你記錄的數字,你期望的數字等。 – debleek63

+0

重新啓動應用程序後,我需要重新顯示圖像查看完全相同的點它被保存。現在,在每次加載時,圖像都是幾個像素(有時更多,有時更少),遠離應該的位置。日誌中的位置看起來不錯 - 但是視圖仍然遠離它保存的位置。我在這裏刪除了代碼[鏈接](http://snipt.org/lgHo9)。感謝您的回答。編輯:它可能與GestureRecognizer有關?理論上的一切應該工作正常... – Alex