2010-10-24 93 views
0

嘿大家。我搜索了網頁,並且確實沒有發現像這樣的問題。我的設置如下:我試圖製作一個應用程序,用戶在uiscrollview(它可以放大)內的uiview上拖動uiimageviewss,但也可以將圖像拖到垃圾箱中刪除。當滾動視圖放大時,用戶仍然可以拖動,因爲我已經創建了子視圖並覆蓋了touchesMoved方法。我希望用戶能夠將uiimageviews拖放到屏幕右下角的垃圾箱中。當uiscrollview是普通的縮放比例時,我已經實現了這個功能,但是當你放大時,你不能將圖像拖到垃圾箱,因爲垃圾箱是控制器視圖本身的子視圖(這樣它就不會縮放與uiview),當然不是在uiscrollview的屏幕的正確座標。在uiscrollview上放大uiimageview到「垃圾桶」

我發現了一個名爲ConvertRect的視圖方法,它將一個矩形轉換爲您給該方法的任何視圖的座標,但這似乎不起作用。我在每個mapimage(imageview子類)中進行檢查,以檢查uiimageview的框架是否與trashcan的框架相交。所以我在做這個檢查之前嘗試了這個方法,但就像我說的那樣,它似乎沒有工作。

所以,所有這些複雜,讓我簡單地說我的問題。無論uiscrollview的縮放級別是什麼,我都想將圖像拖到垃圾箱。我可以製作uiscrollview的trashcan部分,但我需要一種方法使它保持在右下角,並且在uiscrollview時也不會縮放。任何想法將非常感激,謝謝你們。 :)

回答

0

我有完全相同的挑戰。

在可以只形容簡稱:

當你開始拖動圖像從UIScrollView中刪除,並將其添加作爲一個子視圖您的視圖控制器的主視圖。

確保圖像在過程中不會丟失(意味着:仍有人保留它)。

拖動時,不斷檢查,看看您的圖片進入或離開垃圾桶的邊界。你可以用波紋管的方法做到這一點:

-(void) checkForTrashCan 
{ 
    CGRect rect = [self.delegate.trashCan convertRect:self.view.frame fromView:self.view.superview]; 

    if ([self.delegate.trashCan rectIntersectBounds:rect]) 
    { 
     if (NOT self.isInTrashMode) 
     { 
      [self enterTrashMode]; 
     } 
    } 
    else 
    { 
     if (self.isInTrashMode) 
     { 
      [self exitTrashMode]; 
     } 
    } 
} 

當方法rectIntersectBounds僅僅是UIView類的簡單擴展的方法,我寫道:

-(BOOL) rectIntersectBounds : (CGRect) rect 
{ 
    return CGRectIntersectsRect(self.bounds, rect); 
} 

當拖動結束檢查,如果你的觀點是內部垃圾桶,並根據結果採取行動。