2009-12-18 71 views
1

何我可以添加一個旋轉的對象除了拖動?iPhone編碼 - 如何添加旋轉到觸摸事件?

我不需要多點觸摸。

code: 
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    currentTouch = [touch locationInView:self.view]; 
    CGFloat dx = currentTouch.x - carMove.position.x; 
    CGFloat dy = currentTouch.y - carMove.position.y; 
    CGFloat dist = sqrt(dx * dx + dy * dy); 
    if(dist <carMove.radius) { 
     carMove.velocity = CGPointMake(0.0, 0.0); 
     carMove.dragging = YES; 
    } 

    lastTouch = currentTouch; 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    currentTouch = [touch locationInView:self.view]; 
    if(carmove.dragging){ 
     carMove.position = currentTouch; 
     carMove.velocity = CGPointMake(currentTouch.x - lastTouch.x, currentTouch.y - lastTouch.y); 
    } 
    lastTouch = currentTouch; 
} 


- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    carMove.dragging = NO; 
} 

回答

0

試着這麼做

for (int c=0; c < imagesArray.count; c++) { 

    MyCustomImageObject img = [imagesArray objectAtIndex:c]; 

    CGContextSaveGState(context); 

    CGContextTranslateCTM(context, 
    img.centreOfRotatedImageInBottomLeftPixelCoordsX, 
    img.centreOfRotatedImageInBottomLeftPixelCoordsY); 

    CGContextRotateCTM(context, img.floatingPointImageAngleInRadians); 

    CGContextDrawImage(context, 
    CGMakeRect(-img.width/2, -img.height/2, +img.width/2, +img.height/2), 
    image.CGImage); 

    CGContextRestoreGState(context); 
} 

或者,如果你想擁有每幅圖像視圖,使用代碼一樣,一旦在drawRect中環內:您的自定義圖像視圖的方法。

編輯

你需要的,如果你想在手機旋轉底座旋轉的加速度註冊事件。你需要應用低通濾波器,像蘋果建議的文檔,在接收事件的功能:

#define kFilteringFactor 0.1 
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate: 
    (UIAcceleration *)acceleration { 
    // Use a basic low-pass filter to keep only the gravity component of each axis. 
    accelX = (acceleration.x * kFilteringFactor) + (accelX * (1.0 - kFilteringFactor)); 
    accelY = (acceleration.y * kFilteringFactor) + (accelY * (1.0 - kFilteringFactor)); 
    accelZ = (acceleration.z * kFilteringFactor) + (accelZ * (1.0 - kFilteringFactor)); 
} 

然後,只需做一個ATAN(accelY,accelX),設置它的對象被移動並調用setNeedsDisplay。

如果性能不夠高,您可以嘗試測試發送到drawRect的CGRect並僅重繪在重繪矩形內的圖像;但要注意,如果矩形已移動,您還需要(擦除/擦除)它剛剛移動之前的矩形,因此請保留這些矩形的記錄,並根據舊矩形和新矩形中的最小和最大X值和Y值進行更大的重繪矩形。

+0

這將完整輪換,不是?我需要用戶根據需要旋轉圖像對象(而不必完全旋轉)。 – omri 2009-12-18 16:02:59

+0

旋轉將是用戶旋轉到電話,是的。如果您希望手機旋轉控制更改爲用戶開始旋轉對象時相對於旋轉的旋轉,請將圖像和手機的原始旋轉存儲在圖像對象中,並且僅修改圖像旋轉,並且從初始位置狀態。 – martinr 2009-12-18 16:10:41

+0

噢,如果你覺得這個有用,請將我和/或標記爲最佳答案。 Thx – martinr 2009-12-18 16:18:21