2011-07-19 55 views
-1

我需要他的圖像尺寸touchBegan應該增加,如果他的移動也相同,但如果 在touchesended它需要成爲原始大小如何做到這一點。可以任何一個共享代碼要做到這一點..thanks在預先..如何在objective-c中動畫圖像?

回答

0

可以在方法的touchesBegan增加的ImageView的幀尺寸和比例在它顯示的圖像(通過使用scaleimage以適應)。 U可以在touchesEnded方法中將框架設置爲原始尺寸。通過這種方式,你可以達到你想要的動畫效果。希望這會有所幫助。

+0

在這種情況下使用UIView的transform屬性更好。在您的解決方案中,您將不得不存儲原始幀,而使用變換時則不需要。 ;) –

1

讓我們猜測,你的形象被實現爲UIImageView的,如果是的話,你可以使用簡單的轉換。

yourImage.transform = CGAffineTransformMakeScale(scale.x,scale.y);

規模(1.0 - 原始大小)

0

將此代碼放在您的touchesBegan

[UIView animateWithDuration:0.3 animations:^{ 
    myImage.transform = CGAffineTransformMakeScale(1.5, 1.5); 
}]; 

將此代碼放在您的touchesEnded

[UIView animateWithDuration:0.3 animations:^{ 
    myImage.transform = CGAffineTransformMakeScale(1.0, 1.0); 
}]; 
+0

touchesCancelled的代碼應該與touchesEnded相同。另外,在這種情況下,基於塊的動畫對我來說效果不佳。用戶無法在動畫運行時移動視圖。 –

+0

然後使用非塊方法或設置了UIViewAnimationOptionAllowUserInteraction選項。 – Dancreek

1

我猜你的子類的UIImageView - 如果你沒有不,你應該現在就做。 另外,請確保將圖像的.userInteractionEnabled設置爲YES!

接口:

@interface YourImageView : UIImageView 
@property (nonatomic, assign) CGPoint originalCenter; 
@property (nonatomic, assign) CGPoint touchLocation; 
@end 

Implamentation:

@implementation YourImageView 
@synthesize originalCenter; 
@synthesize touchLocation; 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [super touchesBegan:touches withEvent:event]; 

    self.originalCenter = self.center; 
    self.touchLocation = [[touches anyObject] locationInView:self.superview]; 
    self.transform = CGAffineTransformMakeScale(1.5, 1.5); 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [super touchesMoved:touches withEvent:event]; 

    CGPoint touch = [[touches anyObject] locationInView:self.superview]; 
    CGFloat xDifference = (touch.x - self.touchLocation.x); 
    CGFloat yDifference = (touch.y - self.touchLocation.y); 

    CGPoint newCenter = self.originalCenter; 
    newCenter.x += xDifference; 
    newCenter.y += yDifference; 
    self.center = newCenter; 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [super touchesEnded:touches withEvent:event]; 

    self.originalCenter = CGPointZero; 
    self.touchLocation = CGPointZero; 
    self.transform = CGAffineTransformMakeScale(1.0, 1.0); 
} 

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [super touchesCancelled:touches withEvent:event]; 

    self.originalCenter = CGPointZero; 
    self.touchLocation = CGPointZero; 
    self.transform = CGAffineTransformMakeScale(1.0, 1.0); 
} 
@end 

你可以,如果當然,翹曲self.transform =某物成動畫,使它看起來更好。 ;)

+0

請注意,在這種情況下,您不應該使用基於塊的動畫(如Dancreek提出的),因爲在此動畫運行時用戶將無法移動圖像! –

+0

塊動畫仍然可以正常工作,但您必須在選項中設置UIViewAnimationOptionAllowUserInteraction。 – Dancreek

+0

酷,不知道! –