//计算两个点之间的距离
CGFloat distanceBetweenPoints (CGPoint first, CGPoint second) {
CGFloat deltaX = second.x - first.x;
CGFloat deltaY = second.y - first.y;
return sqrt(deltaX*deltaX + deltaY*deltaY );
};
计算两个点与X轴线的夹角:

/**
* 计算角度
* @param edge 线
* @return 角度
*/
-(CGFloat)angleForStartPoint:(CGPoint)startPoint EndPoint:(CGPoint)endPoint{
CGPoint Xpoint = CGPointMake(startPoint.x + 100, startPoint.y);
CGFloat a = endPoint.x - startPoint.x;
CGFloat b = endPoint.y - startPoint.y;
CGFloat c = Xpoint.x - startPoint.x;
CGFloat d = Xpoint.y - startPoint.y;
CGFloat rads = acos(((a*c) + (b*d)) / ((sqrt(a*a + b*b)) * (sqrt(c*c + d*d))));
if (startPoint.y>endPoint.y) {
rads = -rads;
}
return rads;
}
对于一个View进行旋转之后,通过view的frame不能准确找到四个角点位置。方法是将四个角点也进行变换,获取到对应的点
| -( void )click:(UIButton *)btn{ //获取_view的原点旋转40°后的点的位置 CGPoint roP = [ self rotePoint:40 center: _view.center point: _view.frame.origin scale:1]; CGAffineTransform rotation = CGAffineTransformMakeRotation(90*M_PI/180); [_view setTransform:rotation]; } /** * 旋转后点的计算 * * @param angle 旋转角度 * @param center 旋转中心点 * @param initialPoint 旋转前点的位置 * @param scale 旋转变形比例 * * @return 旋转后点的位置 */ - (CGPoint)rotePoint:(CGFloat)angle center:(CGPoint)center point:(CGPoint)initialPoint scale:(CGFloat)scale { CGFloat x = [ self angleForStartPoint:center EndPoint:initialPoint]; x = -x; if (x > 0) { x = M_PI-x; } else { x = - M_PI - x; } CGFloat length = distanceBetweenPoints(center, initialPoint) * scale; CGFloat ang = x + angle / 180.0 * M_PI; NSLog (@ "ang = %f" ,ang * 180/M_PI); CGPoint rotatedPoint; rotatedPoint.x = center.x - length * cos(ang); rotatedPoint.y = center.y - length * sin(ang); return rotatedPoint; } |