【问题标题】:Different coordinates while resizing an imageview iOS调整图像视图iOS大小时的不同坐标
【发布时间】:2015-10-26 22:16:30
【问题描述】:

我正在尝试使用这些函数调整图像视图的大小:

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch* mTouch = [touches anyObject];
    if (mTouch.view == [self Logo_01]) {
        CGPoint cp = [mTouch locationInView:[self view]];
        [[mTouch view]setCenter:CGPointMake(cp.x-xd, cp.y-yd)];
        NSLog(@"questo è x");
        NSLog(@"lalal %f", cp.y);

        if (cp.y > 390) {

            [_Logo_01 setHidden:YES];
        }
        if (cp.y < 130) {
            [_Logo_01 setHidden:YES];
        }
        if (cp.x > 290) {
            [_Logo_01 setHidden:YES];
        }
        if (cp.x < 40) {
            [_Logo_01 setHidden:YES];
        }

    }

当我在应用程序上调整我的徽标大小时,图像会正确调整大小,但我的中心点是错误的

对不起,我错误地发布代码 这是我用来缩放图像的代码:

- (IBAction)ScaleImage1:(UIPinchGestureRecognizer *)recognizer
{
    recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale);
    recognizer.scale = 1;

    CGFloat height = _Logo_01.frame.size.height;
    NSLog(@"SIZE ===== %f", height);
    if (height > 600) {
        [_Logo_01 setHidden:YES];
    }

}

【问题讨论】:

    标签: ios objective-c cocoa-touch uiimageview image-resizing


    【解决方案1】:
    1. 尝试在任何地方都使用相同的样式(随机书写的括号、空格、换行符)——这样更容易阅读,并且表明开发人员更好。
    2. Logo_01 只是 UI 元素的可怕名称。这对资产名称有好处。重构并将其重命名为例如startingLogoImageView
    3. 将视图与==isEqual 进行比较的方式不同。一个比较指针,另一个比较对象。请阅读它,因为如果这是无意的,那将是一个严重的错误。
    4. setCenter: 行中的xd 是什么?它来自哪里?
    5. 我们尽量不在 Objective-C 中使用快捷方式。你应该命名cptouchPoint,因为它实际上是什么更明显。这是 Apple 推荐并被开发人员使用的方式。

    所以代码:

    // extern NSUInteger const kViewOffsetY; // uncomment this line if you want it accessible via other classes, delete otherwise
    NSUInteger const kViewOffsetY = 1;
    NSUInteger const kViewOffsetX = 1;
    
    - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
        UITouch *touch = [touches anyObject];
        if ([touch.view isEqual:startingLogoImageView]) {
            UIView *touchedView = touch.view;
            CGPoint touchPoint = [touch locationInView:self.view];
            [touchedView setCenter:CGPointMake(CGRectGetMidX(touchedView.frame) - kViewOffsetX, CGRectGetMidY(touchedView.frame) - kViewOffsetY)];
    
            // where are these values from? you probably should calculate it more dynamically
            BOOL shouldHideView = touchPoint.y > 390 || touchPoint.y < 130 || touchPoint.x > 290 || touchPoint.x < 40;
            if (shouldHideView) {
                [touchedView setHidden:YES];
            }
        }
    }
    

    为什么会出错?因为在setCenter: 方法中您使用的是左上角(xy 的视图值在左上角而不是在中心),而您应该使用中心点。

    【讨论】:

    • @Mark 更新的代码适用于我的修复。您应该只修复所有无效名称等错误。在 obj-c 中,我们将方法名写成小写字母,而不是大写字母。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    相关资源
    最近更新 更多