问题描述
转换方形图像或圆形图像很容易...
transform a square image or round image is easy to do...
但是如果是矩形图像呢???
But what if a rectangle image ???
这是我想用触摸事件转换的图像.
This is the image I want to transform with touch event .
圆心是 (30 , 236) ,如果我触摸屏幕上的任何地方
The circle center is (30 , 236) , if I touch any place on the screen
Imageview 会将箭头转换为我的接触点.
Imageview will transform the arrow to my touch point.
但是圆心还是原来的地方.
But the circle center still the same place .
我尝试使用测试角度来转换图像
I try to transform the image use a test angle
会变成这样...
如何调整图像?
还有代码在这里
- (void)viewDidLoad {
CGRect arrowImageRect = CGRectMake(20.0f, 20.0f, 15.0f, 220.0f);
arrow = [[UIImageView alloc] initWithFrame:arrowImageRect];
[arrow setImage:[UIImage imageNamed:@"arrow.png"]];
arrow.opaque = YES;
[self.view addSubview:arrow];
[super viewDidLoad];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [touches anyObject];
CGPoint touchPoint = [touch locationInView:self.view];
NSLog(@"Position X: %f \n, Y: %f",touchPoint.x,touchPoint.y);
CGAffineTransform transform = CGAffineTransformIdentity;
arrow.transform = CGAffineTransformRotate(transform, ?????? );
}
??????部分应该是最后的解决方案......
The ?????? part should be the last solution ...
或者也许我需要调整图像视图的大小???
Or Maybe I need to resize the imageview ???
感谢您的回复或回答:-)
Thanks for any reply or answer :-)
韦伯
推荐答案
这是我认为这个问题的最终解决方案
Here is the final solution I figure this problem
检查此代码
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch=[[event allTouches]anyObject];
[self transformSpinnerwithTouches:touch];
}
-(void)transformSpinnerwithTouches:(UITouch *)touchLocation
{
CGPoint touchLocationpoint = [touchLocation locationInView:self.view];
CGPoint PrevioustouchLocationpoint = [touchLocation previousLocationInView:self.view];
//origin is the respective piont from that i gonna measure the angle of the current position with respective to previous position ....
CGPoint origin;
origin.x = arrow.center.x;
origin.y = arrow.center.y;
CGPoint previousDifference = [self vectorFromPoint:origin toPoint:PrevioustouchLocationpoint];
CGAffineTransform newTransform = CGAffineTransformScale(arrow.transform, 1, 1);
CGFloat previousRotation = atan2(previousDifference.y, previousDifference.x);
CGPoint currentDifference = [self vectorFromPoint:origin toPoint:touchLocationpoint];
CGFloat currentRotation = atan2(currentDifference.y, currentDifference.x);
CGFloat newAngle = currentRotation- previousRotation;
temp1 = temp1 + newAngle;
//NSLog(@"temp1 is %f",temp1);
//NSLog(@"Angle:%F\n",(temp1*180)/M_PI);
newTransform = CGAffineTransformRotate(newTransform, newAngle);
[self animateView:arrow toPosition:newTransform];
}
-(void)animateView:(UIView *)theView toPosition:(CGAffineTransform) newTransform
{
arrow.transform = newTransform;
}
-(CGPoint)vectorFromPoint:(CGPoint)firstPoint toPoint:(CGPoint)secondPoint
{
CGFloat x = secondPoint.x - firstPoint.x;
CGFloat y = secondPoint.y - firstPoint.y;
CGPoint result = CGPointMake(x, y);
//NSLog(@"%f %f",x,y);
return result;
}
这篇关于iphone:如何使用触摸事件旋转矩形图像?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!