如何将uiview从左向右移动,反之亦然

时间:2013-05-03 10:42:06

标签: iphone ios

您好我正在开发一个应用程序。我在一个视图的动画中从左向右和从右向左移动并更改该视图中包含的标签的值。但是当我单击左侧时,该视图被删除或右键和新视图覆盖旧视图。所以我不想覆盖。我想添加新视图。我的代码是

    -(void)centerAnimation1:(id)sender
     {
         UIView *currentView = daysview;
            theWindow = daysview;
         // set up an animation for the transition between the views
        CATransition *animation = [CATransition animation];
            animation.delegate = self;
        [animation setDuration:0.4];
        [animation setType:kCATransitionMoveIn];

         if(rhtolft)
         {
             [animation setSubtype:kCATransitionFromLeft];
         }
         else
         {
             [animation setSubtype:kCATransitionFromRight];
         }
        [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
        [[theWindow layer] addAnimation:animation forKey:@"SwitchToView1"];
            [currentView removeFromSuperview];
        }


        - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{

             if(animate)
             {
                 CATransition *animation = [CATransition animation];
                 animation.delegate = self;
                 [animation setDuration:0.4];
                 [animation setType:kCATransitionMoveIn];
                 if(rhtolft)
                 {
                     [animation setSubtype:kCATransitionFromLeft];
                     rhtolft=NO;
                 }
                 else
                 {
                     [animation setSubtype:kCATransitionFromRight];                
                 }
                 [[theWindow layer] addAnimation:animation forKey:@"SwitchToView1"];
                 animate=NO;
                 [self.view addSubview:daysview];
             }
         }

我只是在左边的右键操作方法中调用centerAnimation1方法。调用此方法后,我更改了标签值。

5 个答案:

答案 0 :(得分:18)

试试这个

首先来看L到R

     CGRect basketTopFrame = Yourview.frame;
         basketTopFrame.origin.x = 115;
     [UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationOptionCurveEaseIn animations:^{ Yourview.frame = basketTopFrame; } completion:^(BOOL finished){ }];

然后R到L

    CGRect napkinBottomFrame = Yourview.frame;
     napkinBottomFrame.origin.x = 0;
     [UIView animateWithDuration:0.3 delay:0.0 options: UIViewAnimationOptionCurveEaseOut animations:^{ Yourview.frame = napkinBottomFrame; } completion:^(BOOL finished){/*done*/}];

答案 1 :(得分:4)

使用以下代码

UIView * testView = [[UIView alloc] initWithFrame:CGRectMake(20.0f, 100.0f, 300.0f, 200.0f)];
[testView setBackgroundColor:[UIColor blueColor]];
[self.view addSubview:testView];

[UIView animateWithDuration:0.3f
                      delay:0.0f
                    options:UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse
                 animations:^{
                     [testView setFrame:CGRectMake(0.0f, 100.0f, 300.0f, 200.0f)];
                 }
                 completion:nil];

[testView release];

并查看以下链接:http://mobile.tutsplus.com/tutorials/iphone/ios-sdk_uiview-animations/

答案 2 :(得分:1)

当按钮单击UIView时,从右向左和从左向右滑动。

Global Declare NSString * string = @" one&#34 ;;

- (void)viewDidLoad
{
    [super viewDidLoad];
    stringslider = @"one";
}

Action Button "click"

-(IBAction)slider:(id)sender{
    if ([stringslider isEqualToString:@"one"]) {
        [UIView animateWithDuration:0.2
                     animations:^{[sliderview setFrame:CGRectMake(205, [sliderview frame].origin.y, 116, 275)];
                     }

                     completion:nil];
        stringslider = @"two";
    }
 else if ([stringslider isEqualToString:@"two"]) {
        [UIView animateWithDuration:0.2
                         animations:^{[sliderview setFrame:CGRectMake(342, [sliderview frame].origin.y, 116, 275)];
                         }
         completion:nil];
        stringslider = @"one";

}
}


easy uiview animation is done.

答案 3 :(得分:1)

  

使用Swift 4.2和Swift 5

从左向右动画UIView,反之亦然。从左到右为0,从右到左为1

enter image description here


class AnimationView: UIView {
    enum Direction: Int {
        case FromLeft = 0
        case FromRight = 1
    }

    @IBInspectable var direction : Int = 0
    @IBInspectable var delay :Double = 0.0
    @IBInspectable var duration :Double = 0.0
    override func layoutSubviews() {
        initialSetup()
        UIView.animate(withDuration: duration, delay: delay, usingSpringWithDamping: 0.9, initialSpringVelocity: 0.2, options: .curveEaseIn, animations: {
            if let superview = self.superview {
                           if self.direction == Direction.FromLeft.rawValue {
                               self.center.x += superview.bounds.width
                           } else {
                               self.center.x -= superview.bounds.width
                           }
                       }
        })
    }
    func initialSetup() {
        if let superview = self.superview {
            if direction == Direction.FromLeft.rawValue {
             self.center.x -= superview.bounds.width
            } else {
                self.center.x += superview.bounds.width
            }

        }
    }
}

答案 4 :(得分:0)

尝试以下代码,我在我的应用中使用:

CGRect rectLeft = btnLeft.frame;
rectLeft.origin.x = rectLeft.origin.x + rectLeft.size.width;

CGRect rectRight = btnRight.frame;
rectRight.origin.x = rectRight.origin.x - rectRight.size.width;

[UIView animateWithDuration:0.5 animations:^{

    btnLeft.frame = rectLeft;
    btnRight.frame = rectRight;

} completion:nil];