2012-03-04 42 views
0

我想寫一段代碼,可以告訴CGPoint是否位於圖像的黑色區域內(成功的答案是here)。在我的實現,我可以成功返回的NSLog如果觸摸點是黑色與此代碼:訪問CGImage的起源?

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
UITouch *touch = [[event allTouches] anyObject]; 
CGPoint point = [touch locationInView:self.view]; 
UIColor *pixelColor = [self.imageData colorAtPixel:point]; 
if(pixelColor){ 
    NSLog(@"hit a zone in the black!"); 
} else { 
    NSLog(@"no hit!"); 
} 

}

self.imageData距離self.shapeImage.image.CGImage一個UIImage imageWithCGImage。所以這完美的工作,問題是我的CGImage的起源是不正確的。如果我移動我的self.shapeImage說(500,500),我的測試只產生一個命中,就好像圖像在(0,0)。它好像我需要以某種方式將我的CGImage原點與shapeImage.frame原點正確對齊。

關於如何解決這個問題的任何想法?謝謝

回答

2

看來你對CGImage有些混淆了: CGImage沒有起源屬性,只是大小。 它只是一個圖像,它不在超級視圖中...... 將其視爲JPEG或PNG文件,它們具有大小,然後在某個UIView或其他具有原點矩形的可視對象中使用它們...在point2代替point

0

嘗試測試:

CGPoint point = [touch locationInView:self.view]; 
CGPoint point2 = CGPointMake (point.x - shapeImageContainer.frame.origin.x,point.y - shapeImageContainer.frame.origin.y); 
UIColor *pixelColor = [self.imageData colorAtPixel:point2]; 

或定義點從shapeImageContainer產地

CGPoint point = [touch locationInView:self.shapeImageContainer]; 

編輯:更改名稱shapeImageshapeImageContainer因此,顯而易見,我們正在討論保持圖像而不是圖像本身的對象(UIView或類似的東西)。