2015-05-18 3 views
0

Я создаю приложение iOS, используя StoryBoards.Как правильно настроить кадр после перетаскивания?

В моем приложении я хочу создать пользовательский слайдер. Для этого я создал два вида и изображения программно. Большой вид считается слайдером. И маленький - большой палец. Я применил panGesture для большого пальца, чтобы он мог быть подвижным. Он должен находиться в слайдере.

У меня есть действие с двумя кнопками, Кнопка добавления используется для добавления ширины большого пальца [малого вида] только по правую сторону. Для этого я использую значение единицы. Пусть это будет 6. Кнопка минуса используется для уменьшения ширины большого пальца только с правой стороны на одно и то же значение единицы.

Все они работают нормально. Проблема возникает после перетаскивания большого пальца [small view]. После этого, если я нажимаю кнопку «Добавить», позиция x-координат сдвигается. Я хочу, чтобы она осталась такой же. В то же время значение NSLog x, я получил то же значение x После перетаскивания и нажатия кнопки «Добавить» . Я не могу понять, почему Frame смещается. Это текущий результат.

И мой ожидаемый результат, когда я перетащить вид с помощью PanGesture х-координата будет оставаться same.And я хочу увеличить ширину рамы на этой позиции

#import "ViewController.h" 

@interface ViewController() 
{ 
    UIView *bookingSlotView; 
    UIView *thumb; 
    UIImageView *knob; 
    UIPanGestureRecognizer *move; 
    CGRect thumbRect; 
    int delta,thumbWidth,thumbXCord,flag; 

} 
@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    delta=6; 
    thumbWidth=40; 
    thumbXCord=160; 
    flag=0; 

    thumbRect = CGRectMake(thumbXCord, 0.0f, thumbWidth, 10); 

    bookingSlotView = [[UIView alloc]initWithFrame:CGRectMake(20, 150, 280, 10)]; 
    bookingSlotView.backgroundColor=[UIColor grayColor]; 
    [self.view addSubview:bookingSlotView]; 

    thumb=[[UIView alloc]initWithFrame:thumbRect]; 
    thumb.backgroundColor=[UIColor greenColor]; 
    [bookingSlotView addSubview:thumb]; 

    knob=[[UIImageView alloc]initWithFrame:CGRectMake(thumb.frame.origin.x,thumb.frame.origin.y+30,thumb.frame.size.width/2,thumb.frame.size.height+20)]; 
    knob.image=[UIImage imageNamed:@"[email protected]"]; 
    knob.center = CGPointMake(thumb.bounds.size.width/2, thumb.bounds.size.height); 
    [thumb addSubview:knob]; 

    move=[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handleDragDescriptionView:)]; 
    thumb.userInteractionEnabled=YES; 
    [move setMaximumNumberOfTouches:1]; 
    [thumb addGestureRecognizer:move]; 


} 
- (void)handleDragDescriptionView:(UIPanGestureRecognizer *)gestureRecognizer { 

    flag=1; 
    CGPoint translation = [gestureRecognizer translationInView:bookingSlotView]; 
    if ((gestureRecognizer.state == UIGestureRecognizerStateChanged) || 
     (gestureRecognizer.state == UIGestureRecognizerStateEnded)) 
     { 
      thumb.center = CGPointMake(thumb.center.x + translation.x, thumb.center.y); 
      thumbXCord=(int)thumb.center.x; 
      NSLog(@"%d",thumbXCord); 
      [gestureRecognizer setTranslation:CGPointZero inView:thumb]; 
     } 
} 
- (IBAction)increase:(UIButton *)sender { 
    const int newthumbXCord = thumbXCord; 
    if(thumb.frame.size.width<120 && flag==0) 
     { 
      thumbWidth += delta; 
      CGRect newFrame1=CGRectMake(thumbXCord, 0.0f, thumbWidth,10); 
      [thumb setFrame:newFrame1]; 
      knob.center = CGPointMake(thumb.bounds.size.width/2, thumb.bounds.size.height); 
     } 
    //After Dragging this condition Will execute 
    if (flag==1 && thumb.frame.size.width<bookingSlotView.frame.size.width) 
     { 
      thumbWidth += delta; 

      CGRect newFrame1=CGRectMake(newthumbXCord, 0.0f, thumbWidth,10); 
      [thumb setFrame:newFrame1]; 
      NSLog(@"%d---------ThumbXCoordinate",thumbXCord); 
      knob.center = CGPointMake(thumb.bounds.size.width/2, thumb.bounds.size.height); 

     } 
} 
- (IBAction)decrease:(UIButton *)sender { 
    if (flag==1 && thumbWidth>20) 
    { 
     thumbWidth -= delta; 
     CGRect newFrame1=CGRectMake(thumbXCord, 0.0f, thumbWidth,10); 
     [thumb setFrame:newFrame1]; 
     knob.center = CGPointMake(thumb.bounds.size.width/2, thumb.bounds.size.height); 

    } 

    if (thumbWidth>20 && flag==0) 
    { 
     thumbWidth -= delta; 
     [thumb setFrame:CGRectMake(thumbXCord, 0.0f, thumbWidth, 10)]; 
     knob.center = CGPointMake(thumb.bounds.size.width/2, thumb.bounds.size.height); 
    } 

} 
+0

В повороте жесты меняют центр, который является проблемой при перетаскивании. Измените рамку вместо центра. – Mukesh

+0

Я меняю CGPoint на кадр. Теперь его перемещение из экрана при перетаскивании. –

ответ

0

Вы смесительной между установкой рамы происхождение и центр кадра. Как вы сковороду с жестом вы устанавливаете

thumbXCord = (int)thumb.center.x; 

так вы создаете смещение половины ширины большого пальца.

Либо будьте последовательны в отношении того, что вы устанавливаете, либо обновляете thumbXCord для учета ширины.

+0

Как я могу решить эту несогласованность. –

+0

Как минимум 'thumbXCord = (int) (thumb.center.x - (thumb.frame.size.width * 0.5)) ;, но в идеале использовать фрейм или центр во всех случаях – Wain

+0

тот же результат. Это назначение не за работой. –

Смежные вопросы