Я создаю приложение 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);
}
}
В повороте жесты меняют центр, который является проблемой при перетаскивании. Измените рамку вместо центра. – Mukesh
Я меняю CGPoint на кадр. Теперь его перемещение из экрана при перетаскивании. –