2013-03-08 56 views
1

繪製兩點之間的直線我有我的UIView兩個方形的圖像。一旦我將手指從一個圖像拖到另一個圖像上,我想在它們之間繪製一條直線。通過拖動IOS

我處理了touchesMoved方法來檢查我的touchLocation何時到達任一圖像的框架。所以我在開始繪製和兩個點之間處理邏輯部分。

我只是無法弄清楚如何,使用(void)drawRect:(CGRect)rect做。首先,我在drawRect中添加了一個NSlog,並且我編寫了代碼在兩行之間繪製一條線,即使這沒有發生。

我檢查這個question too,但我想繼續拖累和繪製多個點之間的線路。

- (void)drawRect:(CGRect)rect 
{ 
    NSLog(@"Draw Rect Entered"); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSaveGState(context); 
    CGContextSetStrokeColorWithColor(context, [[UIColor blackColor]CGColor]); 
    CGContextSetLineWidth(context, 1.0); 
    CGContextMoveToPoint(context, 0, 0); 
    CGContextAddLineToPoint(context, 20, 20); 
    CGContextStrokePath(context); 
} 
+0

是'-drawRect:'絕對被稱爲 - 你叫'地方-setNeedsDisplay'? 。 – 2013-03-08 14:25:14

+0

drawRect中沒有得到called..no我「米不是要求-setneedsDisplay我在哪裏都叫它 – 2013-03-08 14:26:51

回答

0

爲了更新你需要調用-setNeedsDisplay-setNeedsDisplayInRect:上需要重新繪製的視圖的視圖。一旦確定需要畫線,您應該在觸摸處理程序中執行此操作。這將觸發視圖上的-drawRect:方法 - 您不直接調用-drawRect。欲瞭解更多信息,請閱讀UIView docs。我不知道你是否希望你的線永久存在,一旦created-如果有可能被刪除的可能性,我想通過一個布爾值確定是否劃清界線或不添加if語句-drawRect:控制。然後,如果有必要,您可以輕鬆將其關閉。

根據您的評論,我會創建一個ivar數組,用於存儲當前跟蹤線的點,然後在-drawRect:中循環使用它們,使用Core圖形函數一次繪製線段。這樣,每個重繪都會繪製新的細分和以前的所有細分。由於CGPoint不是OBJ-C的對象,你要麼必須創建一個包裝類或使用OBJ-C++和std::vector。你也可以使用一個固定大小的C數組(你提到你有10個點) - 在這種情況下,你必須將未使用的座標預設爲一些被定義爲無效的任意值(例如-500,-500)並添加如果遇到這些值,則不繪製線段的邏輯。

小點 - 我不會硬編碼線座標 - 相反,你可以從圖像中frame財產得到他們。這樣,如果您更改圖像或調整其大小,您的代碼將更具可讀性並且不會中斷。

+0

的情況是:我是上的任何視圖10箇中給出點之間拖動一旦兩個點連接的線他們之間繪製。一旦拖動操作繼續到另一點,則該行繼續這條線之間。有點像在Android手機上的鎖屏。 – 2013-03-08 14:41:15

+0

確定。因此,點不'UIImages'或'UIView'小號 – 2013-03-08 14:42:22

+0

的點是UIImages。我在viewDidLoad中添加了'[self.view setNeedsDisplay]'。drawRect仍然沒有被調用。 – 2013-03-08 14:45:44

0

有兩個問題我遇到了,可能會導致這個問題:
1)確保您的主線程
2)調用setNeedsDisplay如果您正在使用多個視圖的工作確保您所呼叫setNeedsDisplay反對正確的。
這是很容易與一個視圖工作,忘記調用setNeedsDisplay對父視圖。