iOS   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – touchesBegan,touchesEnded,touchesMoved移动UIView大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_616_1@

概述

我需要拖动我的UIView对象。我使用这个代码,但它不工作 float oldX, oldY; BOOL dragging; - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [[event allTouches] anyObject]; CGPoint tou
我需要拖动我的UIView对象。我使用这个代码,但它不工作

float oldX,oldY;
BOOL dragging;

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    UITouch *touch = [[event allTouches] anyObject];
    CGPoint touchLOCATIOn = [touch LOCATIOnInView:self];

    if ([[touch.view class] isSubclassOfClass:[UILabel class]]) {
        UILabel *label = (UILabel *)touch.view;
        if (CGRectContainsPoint(label.frame,touchLOCATIOn)) {
            dragging = YES;
            oldX = touchLOCATIOn.x;
            oldY = touchLOCATIOn.y;
        }
    }


}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

    dragging = NO;
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

    UITouch *touch = [[event allTouches] anyObject];
    CGPoint touchLOCATIOn = [touch LOCATIOnInView:self];

    if ([[touch.view class] isSubclassOfClass:[UILabel class]]) {
        UILabel *label = (UILabel *)touch.view;

        if (dragging) {
            CGRect frame = label.frame;
            frame.origin.x = label.frame.origin.x + touchLOCATIOn.x - oldX;
            frame.origin.y =  label.frame.origin.y + touchLOCATIOn.y - oldY;
            label.frame = frame;
        }

    }


}

解决方法

你的代码有一些奇怪的东西。

你要求自己的位置,一些UIView可能包含你想要检查的UILabel。这就是为什么你不会把touchesXXX添加你的UILabel子类的一个问题。

这取消了,因为您使用的是label.frame,它是根据其superview.bounds(您的父级UIView您询问的触摸位置)定义的,但这并不意味着最直接的方式来遵循什么继续

大佬总结

以上是大佬教程为你收集整理的ios – touchesBegan,touchesEnded,touchesMoved移动UIView全部内容,希望文章能够帮你解决ios – touchesBegan,touchesEnded,touchesMoved移动UIView所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。