2011-09-14 51 views
0

是否可以平移UIImageView,並且當它與另一個UIImageView的框架相交時,是否讓其他UIImageView被另一個UIImageView推送而不需要經過它?我希望這是有道理的!用另一個UIImageView推UIImageView,可能嗎?

如果可能的話,你能給我一些關於如何去實現這個的想法嗎?

我想象它會去像...

如果幀幀相交從左邊或右邊的X/Y軸,在與相同的距離推架同方向的其他框架的舉動。雖然這個邏輯對我來說有點合理,但我不確定我是如何在代碼中實現它的。

我真的很感激你可以提供任何建議。

+0

你是說像滑動? – booleanBoy

+0

是的...我基本上在尋找一種方法來使用一個UIImageView來向左或向右滑動另一個,這取決於平移手勢的移動方向。 – Jason

+0

你的意思是當用戶滑動時,當前圖像應該被下一個圖像推到左邊? – booleanBoy

回答

1

所以,你只關注左/右平移...

讓我們假設你有2個UIImageViews,一個& b,作爲一些其他UIView的子視圖並被定義爲某個類的類成員。

你可以得到幫助檢測通過創建UIPanGestureRecognizer的實例,並將它們添加到每個UIImageView的使用方法addGestureRecognizer平移手勢(拖動觸摸)關於這些觀點:

在創建每個UIPanGestureRecognizer,你需要指定一個選擇接收手勢事件。我們說,這就是所謂的didMove:

現在,一些示例代碼:

- (void) didMove:(UIPanGestureRecognizer*)recognizer { 
    UIView* view = [recognizer view]; 

    // Remember our UIImageViews are class members called, a & b 
    // 
    UIView* otherView = view == a ? b : a;  

    if (recognizer.state == UIGestureRecognizerStateBegin 
     || recognizer.state == UIGestureRecognizerStateChanged) { 

     // Moving left will have a negative x, moving right positive 
     // 
     CGPoint translation = [recognizer translationInView:view.superview]; 
     view.center = CGPointMake(view.center.x + translation.x, view.center.y); 

     // Reset so we always track the translation from the current view position 
     // 
     [recognizer setTranslation:CGPointZero inView:view.superview]; 

     if (CGRectIntersectsRect(view.frame, otherView.frame)) { 
      // Translate by the same number of points to keep views in sync 
      // 
      otherView.center = CGPointMake(otherView.center.x + translation.x, otherView.center.y); 
     } 
    } 
} 

它可能不是正是你需要的,但它應該給你一個好主意,它可以怎麼做。

1

聽起來像是你最好使用類似的Cocos2D與它的精靈,路口和一些基本的物理...

+0

如果沒有使用Cocos2D,這個功能會很難實現? – Jason

+0

大量的計算和自定義動畫骯髒的工作,就這些。沒有什麼壓倒性的想法。 – Ariel

1

你可以像這樣做,

首先,創建的UIImageView和UIImage的分配給它。第二,當用戶滑動或做出任何手勢時,只需通過再次設置其框架來更改卡的座標。

既然你想讓卡片滑開,你必須將x座標改爲負值,以便它從視圖中滑落。

以上所說的重構imageview的代碼應該在UIView的setAnimation方法組中給出...以及所需的延遲。

爲了實現推送效果,在同一個動畫代碼塊中調用了一個方法,該代碼創建一個新的imageview(名稱與第一個imageview相同)並將其保留在視圖外。這超出了屏幕的寬度。 (不要忘記釋放之前被推開的卡)

然後再次爲此圖像視圖創建一個新框架,使其出現在屏幕的中心....當上面的三個代碼步驟放在具有延遲時間的UIView或UIImageView的代碼動畫塊將會達到所需的效果。

希望這有助於....

快樂編碼....