【问题标题】:Zoom with UIScrollView and rotate with UIRotationGestureRecognizer使用 UIScrollView 缩放并使用 UIRotationGestureRecognizer 旋转
【发布时间】:2012-12-01 12:39:00
【问题描述】:

我试图让 UIImageViewUIScrollView 内旋转,但是当我尝试缩放/取消缩放时,我的旋转回到 0

这是我的轮换代码:

- (void)rotateImage:(UIRotationGestureRecognizer*)rotate
  {
  if ([rotate state] == UIGestureRecognizerStateEnded)
  {
    rotateAngle += [spin rotation];
    return;
  }

  myView.transform = CGAffineTransformMakerotation(rotateAngle + [rotate rotation]);
}

关于UIScrollView,我只是在-(UIView*)viewForZoomingInScrollView:中返回myView

最后一个信息,在我的界面构建器中,这是我的视图堆栈:

UIImageView
UIView (myView)
UISCrollView

这意味着我在UIImageViewUIScrollView 之间有一个UIView

【问题讨论】:

  • 您有解决方案吗?我非常卡在同一点上。

标签: iphone ios ipad uiscrollview cgaffinetransform


【解决方案1】:

我宁愿建议您使用捏合手势来处理缩放。它会看起来更整洁,更均匀。向视图添加捏合手势。对于缩放,在其选择器方法中添加以下代码

   - (void)handlePinch:(UIPinchGestureRecognizer *)recognizer
{


   myView.transform = CGAffineTransformScale(recogniser.view.transform, recognizer.scale, recognizer.scale);
recognizer.scale = 1;

}

用于旋转,

    -(void)handleRotate:(UIRotationGestureRecognizer *)rec
{


    myView.transform = CGAffineTransformRotate(rec.view.transform, rec.rotation);
    rec.rotation = 0;
}

确保将 self 声明为手势的委托并实现以下委托方法

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}

从中删除我的视图

 -(UIView*)viewForZoomingInScrollView:  

实施我的解决方案之前的方法。让手势单独处理缩放而不是滚动视图。:) 祝你好运

【讨论】:

  • 嗯,谢谢你的回答,那是提交给另一个主题的。但是我有几个链接到这个 ScrollView 的东西,所以我想知道在保持 ScrollView 缩放的同时是否有解决方案。
  • 用 CGAffineTransformRotate 代替 CGAffineTransformMakerotation
  • CGAffineTransformRotate 还是有同样的问题
【解决方案2】:

捏手势 使用苹果库中的代码

别忘了加UIGestureRecognizerDelegate,UIScrollViewDelegate

self.ScrollView= [[UIScrollView alloc]init];
self.ScrollView.frame = CGRectMake(0, 0, DEVICE_WIDTH, DEVICE_HEIGHT);
[self.view addSubview:self.ScrollView];

// for pinch Gesture
self.ScrollView.minimumZoomScale=0.5;
self.ScrollView.maximumZoomScale=6.0;
self.ScrollView.contentSize=CGSizeMake(imageView.frame.size.width, imageView.frame.size.height);
self.ScrollView.delegate = self;

[self.ScrollView addSubview:imageView];

-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{ 
    return imageView;
}

对于旋转,

UIRotationGestureRecognizer  *rotation = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(handleRotate:)];
    rotation.delegate =self;
    [self.ScrollView addGestureRecognizer:rotation];

- (IBAction)handleRotate:(UIRotationGestureRecognizer *)recognizer {

    recognizer.view.transform = CGAffineTransformRotate(recognizer.view.transform, recognizer.rotation);
    recognizer.rotation = 0;

}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}

【讨论】:

    猜你喜欢
    • 2011-12-31
    • 1970-01-01
    • 2012-08-06
    • 2012-04-06
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多