我希望我的代码(ipad app)能够通过触摸来处理图像的大小调整。 我对xcode如何处理点坐标感到困惑。 我编写了我的代码,考虑到框架的原点(frame.origin)位于左上方(我在某处读取),触摸位置是手指触摸屏幕的坐标,左侧是正方向( x)和向上(y)。如果我错在那里,那将解释为什么我的代码不能正常工作。 这是我的代码:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
CGFloat kResizeThumbSize = 45.0f;
touchStart = [[touches anyObject] locationInView:self.view];
CGFloat xO = _ImageView.frame.origin.x;
CGFloat yO = _ImageView.frame.origin.y;
CGFloat width = _ImageView.frame.size.width;
CGFloat height = _ImageView.frame.size.height;
isResizingUD = (xO - kResizeThumbSize < touchStart.x < xO + width + kResizeThumbSize &&
(yO - kResizeThumbSize < touchStart.y < yO + kResizeThumbSize ||
yO - height - kResizeThumbSize < touchStart.y < yO - height + kResizeThumbSize) );
isResizingLR = (yO + kResizeThumbSize < touchStart.x < xO + width - kResizeThumbSize &&
(xO - kResizeThumbSize < touchStart.x < xO + kResizeThumbSize ||
xO - width - kResizeThumbSize < touchStart.x < xO - width + kResizeThumbSize));
}
//moving the image
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint touchPoint = [[touches anyObject] locationInView:self.view];
CGPoint previous = [[touches anyObject] previousLocationInView:self.view];
CGFloat deltaWidth = touchPoint.x - previous.x;
CGFloat deltaHeight = touchPoint.y - previous.y;
// get the frame values so we can calculate changes below
CGFloat x = _ImageView.frame.origin.x;
CGFloat y = _ImageView.frame.origin.y;
CGFloat width = _ImageView.frame.size.width;
CGFloat height = _ImageView.frame.size.height;
if (isResizingLR) {
_ImageView.frame = CGRectMake(x, y, width+deltaWidth, height);
} else if (isResizingUD) {
_ImageView.frame = CGRectMake(x, y, width, height+deltaHeight);
} else {
// not dragging from a corner -- move the view
_ImageView.center = CGPointMake(self.view.center.x + touchPoint.x - touchStart.x,
self.view.center.y + touchPoint.y - touchStart.y);
}
}
我希望只有当用户在kResizeThumbSize中触摸图像的底部或顶部时才能在上/下方向调整图像(实际上,我不确定它是否表示单位)以及如果用户在kResizeThumbSize内触摸图像的左边框或右边框,则为左/右方向。不幸的是,发生的事情是图像只能在左/右方向上调整大小,无论我放在哪里,它都会调整大小。 非常欢迎任何帮助。
答案 0 :(得分:0)
固定!
对于需要帮助的人,我发布了我的代码。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
CGFloat kResizeThumbSize = 10.0f;
touchStart = [[touches anyObject] locationInView:self.view];
CGFloat xO = _ImageView.frame.origin.x;
CGFloat yO = _ImageView.frame.origin.y;
CGFloat width = _ImageView.frame.size.width;
CGFloat height = _ImageView.frame.size.height;
isResizingUD = (xO - kResizeThumbSize < touchStart.x &&
touchStart.x < xO + width + kResizeThumbSize &&
yO + height - kResizeThumbSize < touchStart.y);
isResizingLR = (yO + kResizeThumbSize < touchStart.y &&
touchStart.y< yO + height - kResizeThumbSize &&
xO + width - kResizeThumbSize < touchStart.x);
isMoving = (xO+kResizeThumbSize< touchStart.x &&
touchStart.x < xO + width - kResizeThumbSize &&
yO + kResizeThumbSize < touchStart.y &&
touchStart.y< yO + height - kResizeThumbSize);
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint touchPoint = [[touches anyObject] locationInView:self.view];
CGPoint previous = [[touches anyObject] previousLocationInView:self.view];
CGFloat deltaWidth = touchPoint.x - previous.x;
CGFloat deltaHeight = touchPoint.y - previous.y;
// get the frame values so we can calculate changes below
CGFloat x = _ImageView.frame.origin.x;
CGFloat y = _ImageView.frame.origin.y;
CGFloat width = _ImageView.frame.size.width;
CGFloat height = _ImageView.frame.size.height;
if (isResizingUD) {
_ImageView.frame = CGRectMake(x, y, width, height+deltaHeight);
} else if (isResizingLR) {
_ImageView.frame = CGRectMake(x, y, width+deltaWidth, height);
} else if (isMoving) {
// not dragging from a corner -- move the view
_ImageView.frame = CGRectMake(x+deltaWidth, y+deltaHeight, width, height);
}
}