2011-05-12 55 views
4

我需要添加句柄(到角落)的視圖,所以用戶可以調整它們的視圖大小。類似於在Apples'網頁'或'keynote'應用中編輯圖形的東西。 (或在任何其他圖形應用程序)。 我曾嘗試將句柄子視圖添加到給定視圖,但只有在給定視圖邊界內兩個重疊的地方纔會觸及這些視圖。我需要能夠拖動任何角度手柄,這將改變給定視圖的框架或邊界。 (這部分我已經在工作)。如何調整UIView的角點手柄 - 類似於'Pages','Keynote'

任何建議,教程,鏈接可以理解的:)

我是新的,所以我不能:(發表圖片,所以 please take a look at link

回答

2

我會做,從UIView的繼承UIGripView這是你想要的視圖的頂部

會:

  1. 被賦予一個視圖操作和調整自身大小相應(略拉rger,但具有相同中心)
  2. 繪製本身(夾具和邊界) - 實現-(void) drawRect:(CGRect)rect
  3. 註冊手勢識別
  4. 當手柄移動,調整的基本觀點和自己相應
  5. 當中心移動,移動底層視圖的中心和你自己。

它可能更容易對付的手勢,如果你使每個握一個UIView爲好,但它並不難,使某些區域在您的視圖,並檢查觸摸是其中之一。

(請記住使觸摸區域足夠大)

+0

我也嘗試過這種方法,但這種方法還存在另一個問題。當我添加子視圖(比如說)resizableView並嘗試用'gripview'調整大小時,所有的子視圖都搞砸了。 使用'gripView'調整大小之前和之後的示例 http://imageshack.us/photo/my-images/29/beforey.png/ http://imageshack.us/photo/my-images/560/afterv。 png/ – WezUwiUsz 2011-05-12 12:42:17

+0

我並沒有想象手柄視圖和其他視圖之間的子視圖關係。我會讓他們有相同的父母,只是更新手勢識別器中的兩個中心和大小。 – 2011-05-12 13:12:49

1
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    UITouch *touch = [[event allTouches] anyObject]; 
    touchStart = [[touches anyObject] locationInView:self]; 
    isResizingLR = (self.bounds.size.width - touchStart.x < kResizeThumbSize && self.bounds.size.height - touchStart.y < kResizeThumbSize); 
    isResizingUL = (touchStart.x <kResizeThumbSize && touchStart.y <kResizeThumbSize); 
    isResizingUR = (self.bounds.size.width-touchStart.x < kResizeThumbSize && touchStart.y<kResizeThumbSize); 
    isResizingLL = (touchStart.x <kResizeThumbSize && self.bounds.size.height -touchStart.y <kResizeThumbSize); 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ 
    CGPoint touchPoint = [[touches anyObject] locationInView:self]; 
    CGPoint previous=[[touches anyObject]previousLocationInView:self]; 

    float deltaWidth = touchPoint.x-previous.x; 
    float deltaHeight = touchPoint.y-previous.y; 

    if (isResizingLR) { 
     self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y,touchPoint.x + deltaWidth, touchPoint.y + deltaWidth); 
    } 
    if (isResizingUL) { 
     self.frame = CGRectMake(self.frame.origin.x + deltaWidth, self.frame.origin.y + deltaHeight, self.frame.size.width - deltaWidth, self.frame.size.height - deltaHeight); 
    } 
    if (isResizingUR) { 
     self.frame = CGRectMake(self.frame.origin.x ,self.frame.origin.y + deltaHeight, self.frame.size.width + deltaWidth, self.frame.size.height - deltaHeight);  
    } 
    if (isResizingLL) { 
     self.frame = CGRectMake(self.frame.origin.x + deltaWidth ,self.frame.origin.y , self.frame.size.width - deltaWidth, self.frame.size.height + deltaHeight); 
    } 

    if (!isResizingUL && !isResizingLR && !isResizingUR && !isResizingLL) { 
     self.center = CGPointMake(self.center.x + touchPoint.x - touchStart.x,self.center.y + touchPoint.y - touchStart.y); 
    } 
}