布拉德拉森指出我在正確的道路與他的建議把UIImageView
在UIScrollView
。
最後,我把UIImageView
一個UIScrollView
的內部,設置了滾動的contentSize
和的imageView
的界限是大小相同的UIImage的圖像:
UIImage* image = imageView.image;
imageView.bounds = CGRectMake(0, 0, image.size.width, image.size.height);
scrollView.contentSize = image.size;
然後,我可以動畫滾動視圖的contentOffset
實現一個不錯的平移效果:
[UIView beginAnimations:@"pan" context:nil];
[UIView setAnimationDuration:animationDuration];
scrollView.contentOffset = newRect.origin;
[UIView commitAnimations];
在我的具體情況,我向平移一個隨機的空間,我在圖像中。爲了找到一個妥善的矩形平移到和適當的時間,以獲得一個不錯的恆定的速度,我使用以下命令:
UIImage* image = imageView.image;
float xNewOrigin = [TCBRandom randomIntLessThan:image.size.width - scrollView.bounds.size.width];
float yNewOrigin = [TCBRandom randomIntLessThan:image.size.height - scrollView.bounds.size.height];
CGRect oldRect = scrollView.bounds;
CGRect newRect = CGRectMake(
xNewOrigin,
yNewOrigin,
scrollView.bounds.size.width,
scrollView.bounds.size.height);
float xDistance = fabs(xNewOrigin - oldRect.origin.x);
float yDistance = fabs(yNewOrigin - oldRect.origin.y);
float hDistance = sqrtf(powf(xDistance, 2) + powf(yDistance, 2));
float hDistanceInPixels = hDistance;
float animationDuration = hDistanceInPixels/speedInPixelsPerSecond;
我使用的10.0f
speedInPixelsPerSecond
,但其他應用程序可能要使用不同的值。
但在這種情況下的動畫是如此之快,你永遠不會看到圖像,只是目的地。 – TALlama 2009-01-07 22:28:05
在UIView的beginAnimations/commitAnimations塊中放入scrollRectToVisible:animated:方法調用,並在該塊的開始處使用UIView的setAnimationDuration:。這會覆蓋默認的動畫持續時間。您可以使滾動視圖儘可能慢地平移。 – 2009-01-07 23:14:12