接下来的UIImage

我正在尝试绘制一个跟随屏幕触摸的尺子。 在第一次触摸时,我设置第一个点,然后在另一个上,ruller跟随手指在屏幕上resize并围绕第一个点旋转,具体取决于手指的位置。

我试着这样做:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; CGPoint p = [touch locationInView:self.view]; self.regleFirstPoint = p; UIImageView* img = [[UIImageView alloc] initWithImage:self.regleImg]; img.frame = CGRectMake(self.regleFirstPoint.x, self.regleFirstPoint.y, 0, self.regleImg.size.height); [self.view addSubview:img]; } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; CGPoint p = [touch locationInView:self.view]; // Width float deltaY = py - self.regleFirstPoint.y; float deltaX = px - self.regleFirstPoint.x; float width = sqrt((deltaX * deltaX) + (deltaY * deltaY)); // Angle float angleInRadians = atanf(deltaY / deltaX); float angleInDegrees = angleInRadians * 180 / M_PI; // JUST FOR INFO NSLog(@"angle : %f / %f", angleInRadians, angleInDegrees); // Resizing image UIImageView* img = [self.regles lastObject]; img.frame = CGRectMake(self.regleFirstPoint.x, self.regleFirstPoint.y, width, self.regleImg.size.height/2); img.center = self.regleFirstPoint; CGAffineTransform transform = CGAffineTransformIdentity; img.transform = CGAffineTransformRotate(transform, angleInRadians); } 

ruller没有正确地按照手指,我想我错过了什么。 我的代码出了什么问题?

编辑 :经过一些研究后我也试过这个:

 // Resizing images img.frame = CGRectMake(self.regleFirstPoint.x, self.regleFirstPoint.y, largeur, self.regleImg.size.height/2); [img.layer setAnchorPoint:CGPointMake(self.regleFirstPoint.x / img.bounds.size.width, self.regleFirstPoint.y / img.bounds.size.height)]; img.transform = CGAffineTransformRotate(img.transform, angleInRadians); 

这只是一个有序的问题:

  1. 将视图转换为标识
  2. 更改视图的框架
  3. 最后,应用您的转换

这是一段更新的代码,只使用了UIView而不是你的图像:

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; // Hold first touch self.regleFirstPoint = [touch locationInView:self.view]; // Reset view / image _rulerView.transform = CGAffineTransformIdentity; _rulerView.frame = CGRectMake(self.regleFirstPoint.x, self.regleFirstPoint.y, 0, CGRectGetHeight(_rulerView.frame)); } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; CGPoint p = [touch locationInView:self.view]; // Compute width float deltaX = px - self.regleFirstPoint.x; float deltaY = py - self.regleFirstPoint.y; float width = sqrt((deltaX * deltaX) + (deltaY * deltaY)); // Compute angle float angleInRadians = atan2(deltaY, deltaX); NSLog(@"angle (rad) : %f", angleInRadians); NSLog(@"angle (deg) : %f", angleInRadians * 180 / M_PI); // First reset the transformation to identity _rulerView.transform = CGAffineTransformIdentity; // Set anchor point _rulerView.layer.anchorPoint = CGPointMake(0.0f, 0.5f); // Resizing view / image _rulerView.frame = CGRectMake(self.regleFirstPoint.x, self.regleFirstPoint.y, width, CGRectGetHeight(_rulerView.frame)); // Reset the layer position to the first point _rulerView.layer.position = self.regleFirstPoint; // Apply rotation transformation _rulerView.transform = CGAffineTransformMakeRotation(angleInRadians); } 

希望有所帮助。

西里尔