簡體   English   中英

通過設置距離對UIImageView進行動畫處理

[英]Animate UIImageView by Set Distance

我正在嘗試將圖像視圖向前移動一定距離,但似乎無法正常工作。 我的turnRight和turnLeft方法可以正常工作。 我只是對moveForward方法有問題。 這是我正在嘗試的:

- (IBAction)moveForward:(id)sender
{
    if (turtle.image.imageOrientation == UIImageOrientationRight)
    {
        turtle.frame = CGRectMake(turtle.frame.origin.x + 10, turtle.frame.origin.y, 75, 75);
    }
    else if (turtle.image.imageOrientation == UIImageOrientationLeft)
    {
        turtle.frame = CGRectMake(turtle.frame.origin.x - 10, turtle.frame.origin.y, 75, 75);
    }
    else if (turtle.image.imageOrientation == UIImageOrientationUp)
    {
        turtle.frame = CGRectMake(turtle.frame.origin.x, turtle.frame.origin.y + 10, 75, 75);
    }
    else if (turtle.image.imageOrientation == UIImageOrientationDown)
    {
        turtle.frame = CGRectMake(turtle.frame.origin.x, turtle.frame.origin.y - 10, 75, 75);
    }
}

- (IBAction)turnRight:(id)sender
{   
    UIImage *newImage;

    switch (turtle.image.imageOrientation)
    {
        case UIImageOrientationUp:
            newImage = [UIImage imageWithCGImage:[turtle.image CGImage] scale:1.0f orientation:UIImageOrientationRight];
            turtle.contentMode = UIViewContentModeScaleAspectFit;
            break;
        case UIImageOrientationLeft:
            newImage = [UIImage imageWithCGImage:[turtle.image CGImage]scale:1.0f orientation:UIImageOrientationUp];
            turtle.contentMode = UIViewContentModeScaleAspectFill;
            break;
        case UIImageOrientationDown:
            newImage = [UIImage imageWithCGImage:[turtle.image CGImage] scale:1.0f orientation:UIImageOrientationLeft];
            turtle.contentMode = UIViewContentModeScaleAspectFit;
            break;
        case UIImageOrientationRight:
            newImage = [UIImage imageWithCGImage:[turtle.image CGImage]scale:1.0f orientation:UIImageOrientationDown];
            turtle.contentMode = UIViewContentModeScaleAspectFill;
            break;
        default:
            break;
    }
    turtle.image = newImage;
}

- (IBAction)turnLeft:(id)sender
{
    UIImage *newImage;

    switch (turtle.image.imageOrientation)
    {
        case UIImageOrientationUp:
            newImage = [UIImage imageWithCGImage:[turtle.image CGImage] scale:1.0f orientation:UIImageOrientationLeft];
            turtle.contentMode = UIViewContentModeScaleAspectFit;
            break;
        case UIImageOrientationLeft:
            newImage = [UIImage imageWithCGImage:[turtle.image CGImage]scale:1.0f orientation:UIImageOrientationDown];
            turtle.contentMode = UIViewContentModeScaleAspectFill;
            break;
        case UIImageOrientationDown:
            newImage = [UIImage imageWithCGImage:[turtle.image CGImage] scale:1.0f orientation:UIImageOrientationRight];
            turtle.contentMode = UIViewContentModeScaleAspectFit;
            break;
        case UIImageOrientationRight:
            newImage = [UIImage imageWithCGImage:[turtle.image CGImage]scale:1.0f orientation:UIImageOrientationUp];
            turtle.contentMode = UIViewContentModeScaleAspectFill;
            break;
        default:
            break;
    }
    turtle.image = newImage;
}

這里有兩件事要考慮。

1)確保在主線程上進行UI更改。
2)使用UIView的動畫方法

- (IBAction)moveForward:(id)sender
{
    CGRect frame = turtle.frame;
    switch (turtle.image.imageOrientation)
    {
        case UIImageOrientationUp:
            frame.origin.y + 10; 
            break;
        case UIImageOrientationLeft:
            frame.origin.x - 10;
            break;
        case UIImageOrientationDown:
            frame.origin.y + 10;
            break;
        case UIImageOrientationRight:
            frame.origin.x + 10;
            break;
        default:
            break;
    }

    [UIView animateWithDuration:1.0 // The duration in seconds for the animation to complete.
                 animations:^{
                     turtle.frame = frame;
                 }];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM