2016-10-11 35 views
0

我試圖在UIPanGesture識別UIView(中心灰色)期間更新兩個標籤的框架。在UIPanGesture識別過程中設置框架以查看

功能

我需要選擇英語和阿拉伯語之間的語言。中間有一個滑塊按鈕(灰色視圖),我已經應用UIPanGesture。所以在朝方向滑動時,阿拉伯語的語言英文應該移至中心,並假定選擇了它,反之亦然。

我盡我所能,但我只能做到這一點。幀設置不正確,我不知道有沒有其他簡單的方法來做到這一點。

代碼

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    UIPanGestureRecognizer *gesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)]; 
    [dragview addGestureRecognizer:gesture]; 
} 


- (void)handleGesture:(UIPanGestureRecognizer *)gestureRecognizer 
{ 
    CGPoint velocity = [gestureRecognizer velocityInView: gestureRecognizer.view]; 
    CGPoint location = [gestureRecognizer locationInView: gestureRecognizer.view]; 

    if(velocity.x > 0) 
    { 
     NSLog(@"gesture went right"); 
     if (dragview.frame.origin.x + dragview.frame.size.width >= dragV.frame.size.width) { 
      [dragview setFrame:CGRectMake(dragV.frame.size.width - dragview.frame.size.width, dragview.frame.origin.y, dragview.frame.size.width, dragview.frame.size.height)]; 
      english.center = CGPointMake(dragV.frame.size.width/2, 
                   dragV.frame.size.height/2); 
     } else { 
      float dX = location.x-panCoord.x; 
      gestureRecognizer.view.frame = CGRectMake(gestureRecognizer.view.frame.origin.x+dX, 0, gestureRecognizer.view.frame.size.width, gestureRecognizer.view.frame.size.height); 
      [english setFrame:CGRectMake(english.frame.origin.x + 1.0f, english.frame.origin.y, english.frame.size.width, english.frame.size.height)]; 
      [arabic setFrame:CGRectMake(arabic.frame.origin.x + 1.0f, arabic.frame.origin.y, arabic.frame.size.width, arabic.frame.size.height)]; 
     } 
    } 
    else 
    { 
     NSLog(@"gesture went left"); 
     if (dragview.frame.origin.x <= 0) { 
      [dragview setFrame:CGRectMake(0, dragview.frame.origin.y, dragview.frame.size.width, dragview.frame.size.height)]; 
      arabic.center = CGPointMake(dragV.frame.size.width/2, 
             dragV.frame.size.height/2); 
     } else { 
      float dX = location.x+panCoord.x; 
      gestureRecognizer.view.frame = CGRectMake(gestureRecognizer.view.frame.origin.x+dX, 0, gestureRecognizer.view.frame.size.width, gestureRecognizer.view.frame.size.height); 
      [english setFrame:CGRectMake(english.frame.origin.x - 1.0f, english.frame.origin.y, english.frame.size.width, english.frame.size.height)]; 
      [arabic setFrame:CGRectMake(arabic.frame.origin.x - 1.0f, arabic.frame.origin.y, arabic.frame.size.width, arabic.frame.size.height)]; 
     } 
    } 
} 

截圖

最初,它看起來像這樣,

enter image description here

在拖動過程中對阿拉伯語,

enter image description here

在拖動向英語, enter image description here

答案被理解!!

+0

你使用自動佈局? – user3182143

+0

不,我使用自動調整 –

+0

你能不能給我你的代碼嗎?我會幫你 – user3182143

回答

1

我得到了輸出。我嘗試了你的代碼,並且使用了SwipeGestureRecognizer代碼。它現在工作的很好。

我試着用2個optins

選項1:SwipeGestureRecognizer

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Swipe Left 
    UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeLeft:)]; 
    swipeLeft.direction = UISwipeGestureRecognizerDirectionLeft; 
    [arabicView addGestureRecognizer:swipeLeft]; 

    // Swipe Right 
    UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeRight:)]; 
    swipeRight.direction = UISwipeGestureRecognizerDirectionRight; 
    [englishView addGestureRecognizer:swipeRight]; 
} 

- (void)handleSwipeLeft:(UISwipeGestureRecognizer *)recognizer 
{ 
    [self performSelector:@selector(moveAtRight) withObject:nil afterDelay:0.01f]; 
} 

- (void)handleSwipeRight:(UISwipeGestureRecognizer *)recognizer 
{ 
    [self performSelector:@selector(moveAtLeft) withObject:nil afterDelay:0.01f]; 
} 


-(void)moveAtRight 
{ 
    englishView.frame = CGRectMake(0, 0, 53, 53); 
    englishView.backgroundColor = [UIColor lightGrayColor]; 
    arabicView.frame = CGRectMake(53, 0, 205, 53); 
    english.text = @"English"; 
    arabic.text = @"Arabic"; 
    arabicView.backgroundColor = [UIColor blueColor]; 
    [dragview removeFromSuperview]; 
} 


-(void)moveAtLeft 
{ 
    englishView.frame = CGRectMake(0, 0, 205, 53); 
    arabicView.frame = CGRectMake(205, 0, 53, 53); 
    arabicView.backgroundColor = [UIColor lightGrayColor]; 
    englishView.backgroundColor = [UIColor blueColor]; 
    english.text = @"English"; 
    arabic.text = @"Arabic"; 
    [dragview removeFromSuperview]; 
} 

在上面的代碼中,我設置背景色爲blue.If任何你想要的其他顏色的變化。

初始

enter image description here

當我向阿拉伯

enter image description here

刷卡當我刷卡對英語

enter image description here

以上是輸出。

選項2:PanGestureRecognizer

現在,我想與你PanGestureRecognizer Code.I設置框架和背景顏色爲英語和arabicView separately.Now它工作正常。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    _drawPath = [UIBezierPath 
          bezierPathWithRoundedRect:CGRectMake(0, 0, 140, 35) 
          byRoundingCorners:(UIRectCornerBottomLeft | UIRectCornerBottomRight | UIRectCornerTopLeft | UIRectCornerTopRight) 
          cornerRadii:CGSizeMake(4, 4) 
          ]; 
    _rectLayer = [[CAShapeLayer alloc] init]; 
    _rectLayer.path = _drawPath.CGPath; 
    _rectLayer.strokeColor = [UIColor blackColor].CGColor; 
    _rectLayer.lineWidth = 2.0f; 
    _rectLayer.fillColor = [UIColor clearColor].CGColor; 
    _rectLayer.strokeEnd = 0.f; 
    [vi.layer addSublayer:_rectLayer]; 

    [self drawRectangle:nil]; 

    UIPanGestureRecognizer *gesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)]; 
    [gesture setMinimumNumberOfTouches:1]; 
    [gesture setMaximumNumberOfTouches:1]; 
    [englishView addGestureRecognizer:gesture]; 

    UIPanGestureRecognizer *gesture1 = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)]; 
    [gesture1 setMinimumNumberOfTouches:1]; 
    [gesture1 setMaximumNumberOfTouches:1]; 
    [arabicView addGestureRecognizer:gesture1]; 
} 

- (void)handleGesture:(UIPanGestureRecognizer *)gestureRecognizer 
{ 

    if (gestureRecognizer.state == UIGestureRecognizerStateChanged) 
    { 
     NSLog(@"Changed"); 
     CGPoint velocity = [gestureRecognizer velocityInView:gestureRecognizer.view]; 
     CGPoint translation = [gestureRecognizer translationInView:gestureRecognizer.view]; 

     if(velocity.x > 0) 
     { 
      NSLog(@"gesture went right"); 
      gestureRecognizer.view.frame = CGRectMake(gestureRecognizer.view.frame.origin.x + translation.x, 0, gestureRecognizer.view.frame.size.width, gestureRecognizer.view.frame.size.height); 
      NSLog(@"The gestureRecognizer frame is - %@",NSStringFromCGRect(gestureRecognizer.view.frame)); 
      [englishView setFrame:CGRectMake(0, englishView.frame.origin.y, 205, englishView.frame.size.height)]; 
      [englishView setBackgroundColor:[UIColor colorWithRed:(15/255.0f) green:(97/255.0f) blue:(163/255.0f) alpha:1.0f]]; 
      [arabicView setFrame:CGRectMake(205, arabicView.frame.origin.y, 53, arabicView.frame.size.height)]; 
      [arabicView setBackgroundColor:[UIColor lightGrayColor]]; 
      [gestureRecognizer setTranslation:CGPointMake(0, 0) inView:dragV]; 
      [dragview removeFromSuperview]; 

    } 
    else 
    { 
      NSLog(@"gesture went left"); 
      gestureRecognizer.view.frame = CGRectMake(gestureRecognizer.view.frame.origin.x + translation.x, 0, gestureRecognizer.view.frame.size.width, gestureRecognizer.view.frame.size.height); 
      [arabicView setFrame:CGRectMake(53, arabicView.frame.origin.y, 205, arabicView.frame.size.height)]; 
      [englishView setFrame:CGRectMake(0, englishView.frame.origin.y,53,englishView.frame.size.height)]; 
      [arabicView setBackgroundColor:[UIColor colorWithRed:(15/255.0f) green:(97/255.0f) blue:(163/255.0f) alpha:1.0f]]; 
      [englishView setBackgroundColor:[UIColor lightGrayColor]]; 
      [gestureRecognizer setTranslation:CGPointMake(0, 0) inView:dragV]; 
      [dragview removeFromSuperview]; 
    } 
    } 
} 

起初,當我運行應用程序

enter image description here

中指朝阿拉伯語查看

enter image description here

向恩中指中文查看

enter image description here

+0

非常感謝您的回答,並且使用輕掃手勢非常簡單,但我需要將中間處理程序移向兩個極端以選擇語言。請檢查我的更新代碼https://www.dropbox.com/s/qop3ae5nrklylbp/tester.zip?dl=0 –

+0

Maniganda Saravanan檢查我的答案 – user3182143