2013-07-05 73 views
0

我想知道在Xcode中如何互換兩個UIImageViews的位置。交換位置UIViews Xcode

例子:

if (CGRectIntersectsRect(view1.frame, view2.frame)) { 
    [UIView animateWithDuration:0.2 animations:^{ 
    CGRect view1Frame = view1.frame; 
    view1.frame = view2.frame; 
    view2.frame = view1Frame; 
    }]; 
} 

不幸的是,這並不工作,因爲變量每次想起老位置。 你能幫我嗎?

回答

0

嘗試以下操作:

CGRect view1Frame = view1.frame; 
CGRect view2Frame = view2.frame; 

if (CGRectIntersectsRect(view1.frame, view2.frame)) { 
    [UIView animateWithDuration:0.2 animations:^{ 
    view1.frame = view2Frame; 
    view2.frame = view1Frame; 
    }]; 
} 

我認爲這應該工作,我沒有測試,但通常這應該是罰款... 請讓我知道...

另外:如果你想直接改變塊內的變量,使它們在離開塊後有其他值,你需要用__block對它們進行解釋(關於塊的細節,我建議蘋果文件http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/Blocks/Articles/bxVariables.html#//apple_ref/doc/uid/TP40007502-CH6-SW6

關於

0

也許這有助於指針的CGRect結構

CGRect *view1Frame 

應改爲:

CGRect view1Frame = view1.frame; 

我不想更深入到結構體和對象,因爲它們之間的界線會模糊: D,但在這種情況下,您只需使用CGRect而不用指針。你甚至在Xcode得到正常的警告......

感謝認爲

+0

我第一次嘗試使用我的代碼,但第二次沒有使用 – Steven

+0

而且在變量之前的*是我輸入的錯誤。 – Steven

0

你可以從你的層的表示層的當前位置。

CGPoint currentPos1 = [view1.layer.presentationLayer position]; 
NSLog(@"%f %f",currentPos1.x,currentPos1.y); 
CGPoint currentPos2 = [view2.layer.presentationLayer position]; 
NSLog(@"%f %f",currentPos2.x,currentPos2.y); 

在此之後,你可以做動畫來交換他們......

+0

我忘了告訴你,UIImageViews在一個NSMutableArray中。 – Steven

+0

在NSMutableArray中你是什麼意思,是不是他們(UIImageViews)在屏幕上? – NULL

+0

不,他們是。但它們在for循環中顯示在屏幕上。 – Steven

0

我懷疑是你兩次調用此方法,因爲它們重疊兩次動畫只是解開本身。試試這個:

BOOL animationDone = NO; 

if (CGRectIntersectsRect(view1.frame, view2.frame) && !animationDone) { 
    [UIView animateWithDuration:0.2 animations:^{ 
    CGRect view1Frame = view1.frame; 
    view1.frame = view2.frame; 
    view2.frame = view1Frame; 
    animationDone = YES; 
    }]; 
} 
+0

這不起作用... – Steven