#iphone #objective-c #ipad
#iPhone #objective-c #iPad
Вопрос:
Я пытаюсь применить жест к UIImageView, когда я выполняю действие для масштабированного поворота и перемещения изображения в режиме imageview в рабочем режиме. таким образом, я могу видеть, как изображение вращается и масштабируется, и перемещаться из одной точки в другую точку.
Когда я масштабировал изображение и уровень масштабирования до минимального и при нажатии на UIView, который является суперклассом для UIImageView, который также выполняет действие жеста. Как ограничить жест, который должен работать только в UIImageView, а не в UIView. и при попытке ограничить его внутри UIView просмотр изображения не должен выходить за пределы представления.
-(void)InitGestures{
tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
tapRecognizer.numberOfTouchesRequired = 1;
templatePhotoPlaceholderView=[[UIView alloc]init];
templatePhotoPlaceholderView.clipsToBounds = YES;
//templatephotoplaceholder frame setting
[self templatePhotoPlaceholderFrameSetting];
templatePhotoPlaceholderView.backgroundColor=[UIColor colorWithRed:0.8823 green:0.8823 blue:0.8823 alpha:1];
[self photoView:templatePhotoPlaceholderView];
tapRecognizer.view.frame=templatePhotoPlaceholderView.frame;
[self photoButtonPlaceHolder:templatePhotoPlaceholderView];
[selectedTemplateImage addSubview:templatePhotoPlaceholderView];
[templatePhotoPlaceholderView addGestureRecognizer:tapRecognizer];
UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)];
[panRecognizer setMinimumNumberOfTouches:1];
[panRecognizer setMaximumNumberOfTouches:1];
[panRecognizer setDelegate:self];
[templatePhotoPlaceholderView addGestureRecognizer:panRecognizer];
//[panRecognizer release];
UIPinchGestureRecognizer *pinchRecognizer = [[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)] autorelease];
[pinchRecognizer setDelegate:self];
[self.view addGestureRecognizer:pinchRecognizer];
//[pinchRecognizer release];
[self.view addSubview:templatePhotoPlaceholderView];
[tapRecognizer release];
}
-(void)move:(UIPanGestureRecognizer *)gestureRecognizer
{
CGPoint translatedPoint = [gestureRecognizer translationInView:templatePhotoPlaceholderView];
if([gestureRecognizer state] == UIGestureRecognizerStateBegan) {
_firstX = [imageview center].x;
_firstY = [imageview center].y;
}
translatedPoint = CGPointMake(_firstX translatedPoint.x, _firstY translatedPoint.y);
[imageview setCenter:translatedPoint];
}
Комментарии:
1. У кого-нибудь есть идея, как ограничить движущееся изображение указанными границами.
2. просто ограничьте рамку вашего супервизора
Ответ №1:
Сначала вы добавляете UIImageView в UIView. и примените жест к каждому UIView. и измените изображение UIImageView. итак, это похоже на вращение. я атакую следующий код. попробуйте это. Этот пример предназначен для 3 UIView по горизонтали.
-(void)addSwipeEvent:(UIView*)subView{
UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(SwipeRecognizer:)];
recognizer.numberOfTouchesRequired = 1;
recognizer.delegate = self;
[subView addGestureRecognizer:recognizer];
[recognizer release];
UISwipeGestureRecognizer *leftRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(SwipeRecognizer:)];
leftRecognizer.direction=UISwipeGestureRecognizerDirectionLeft;
leftRecognizer.numberOfTouchesRequired = 1;
recognizer.delegate = self;
[subView addGestureRecognizer:leftRecognizer];
[leftRecognizer release];
UISwipeGestureRecognizer *downRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(SwipeRecognizer:)];
downRecognizer.direction=UISwipeGestureRecognizerDirectionDown;
downRecognizer.numberOfTouchesRequired = 1;
recognizer.delegate = self;
[subView addGestureRecognizer:downRecognizer];
[downRecognizer release];
UISwipeGestureRecognizer *upRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(SwipeRecognizer:)];
upRecognizer.direction=UISwipeGestureRecognizerDirectionUp;
upRecognizer.numberOfTouchesRequired = 1;
recognizer.delegate = self;
[subView addGestureRecognizer:upRecognizer];
[upRecognizer release];
}
- (void) SwipeRecognizer:(UISwipeGestureRecognizer *)sender {
if ( sender.direction == UISwipeGestureRecognizerDirectionLeft ){
NSLog(@" *** SWIPE LEFT ***");
}
if ( sender.direction == UISwipeGestureRecognizerDirectionRight ){
NSLog(@" *** SWIPE RIGHT ***");
}
if ( sender.direction== UISwipeGestureRecognizerDirectionUp ){
NSLog(@" *** SWIPE UP ***");
}
if ( sender.direction == UISwipeGestureRecognizerDirectionDown ){
NSLog(@" *** SWIPE DOWN ***");
}
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([touch.view isKindOfClass:[UIView class]])
{
viewIndex = touch.view.tag;
return YES;
}
return NO;
}
-(void)lowLevelSwipeRecognizer{
CATransition *myTransition = [CATransition animation];
myTransition.type = kCATransitionPush;
myTransition.duration = 0.3;
myTransition.subtype = kCATransitionFromRight;
NSString *str = [arrayImg objectAtIndex:0];
for (int i=0; i<2; i ) {
[arrayImg replaceObjectAtIndex:i withObject:[arrayImg objectAtIndex:i 1]];
}
[arrayImg replaceObjectAtIndex:2 withObject:str];
for (int cnt = 0; cnt<3; cnt ) {
if ([[arrayView objectAtIndex:cnt] isKindOfClass:[CustomView class]]) {
CustomView *v = (CustomView *)[arrayView objectAtIndex:cnt];
[v.imageView setImage:[UIImage imageNamed:[arrayImg objectAtIndex:cnt]]];
[v.layer addAnimation:myTransition forKey:nil];
}
}
}
Ответ №2:
Следующий код ограничивает движущееся изображение в пределах супервизора
if (recognizer.state == UIGestureRecognizerStateBegan)
{
previousPoint = [recognizer translationInView:self];
}
else if (recognizer.state == UIGestureRecognizerStateChanged)
{
CGRect parentFrame = self.frame;
CGRect currentFrame = imageView.frame;
if (CGRectContainsRect(parentFrame, currentFrame))
{
CGPoint point = [recognizer translationInView:self.superview];
CGPoint movePoint = CGPointMake(point.x - previousPoint.x, point.y - previousPoint.y);
CGPoint newCenter = CGPointMake(imageView.center.x movePoint.x, imageView.center.y movePoint.y);
imageView.center = newCenter;
previousPoint = point;
}
else
{
CGRect imageRect = imageView.frame;
if (imageRect.origin.x < 0)
imageRect.origin.x = 0;
else if (imageRect.origin.x imageRect.size.width >= self.frame.size.width)
imageRect.origin.x = self.frame.size.width - imageRect.size.width;
if (imageRect.origin.y < 0)
imageRect.origin.y = 0;
else if (imageRect.origin.y imageRect.size.height >= self.frame.size.height)
imageRect.origin.y = self.frame.size.height - imageRect.size.height;
imageView.frame = imageRect;
}
}