UITouch के साथ छेड़छाड़ की

मैं एक साधारण एप्लिकेशन बनाने की कोशिश कर रहा हूं जहां आप उसे छूकर और उसे खींचकर अपने UIImageView को स्थानांतरित कर सकते हैं।

मेरे UIImageView को आईएमवी कहा जाता है

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

UITouch * touch = [touches anyObject];

if([touch view] == self.imv){
    CGPoint location = [touch locationInView:self.view];
    self.imv.center = location;

}
}

-(void ) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch * touch = [touches anyObject];

if([touch view] == self.imv){
    CGPoint location = [touch locationInView:self.view];
    self.imv.center = location;

}
}

मैं इसे पूरे दिन की तरह हल करने की कोशिश कर रहा हूं और मुझे नहीं पता कि क्या गलत है। अगर मैं कथन को अक्षम करता हूं तो यह काम नहीं कर रहा है। मैं क्या कर सकता हूँ?

उत्तर के लिए धन्यवाद

0

2 उत्तर

जब तक आप UIImageView (संभावना नहीं) subclassed है, तो आपका विचार स्पर्श घटनाओं को प्राप्त कर रहा है।

These days it's simpler & more usual to use a UIGestureRecognizer for this kind of thing, in this case a UIPanGestureRecognizer.

जैसे

UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(dragImageView:)];
[self.imv addGestureRecognizer:pan];


- (void)dragImageView:(UIPanGestureRecognizer *)dragImageView {
    if(UIGestureRecognizerStateBegan  == state) {
        originalCenter = self.imv.center;   //add CGPoint originalCenter; member
    } else if(UIGestureRecognizerStateChanged == state) {
        CGPoint translate = [pan translationInView:self.imv.superview];
        self.imv.center = CGPointMake(originalCenter.x + translate.x, originalCenter.y + translate.y);
    }
}
0
जोड़ा

कुछ प्रयोग से, ऐसा लगता है कि [स्पर्श दृश्य] मुख्य UIView लौटा रहा है, न कि आपका सबव्यूव, इसलिए if कथन काम नहीं कर रहा है (मैंने एक स्टोरीबोर्ड xib में UIImageView जोड़ा है)। संपादित करें- ऐसा इसलिए है क्योंकि UIImageView s डिफ़ॉल्ट रूप से स्पर्श ईवेंट को संभाल नहीं करते हैं - देखें यहां viewDidLoad में नियमित <कोड> UIView जोड़ते समय काम करने लगता है जैसा आप उम्मीद करेंगे।

वैसे भी, आपके कोड का यह अनुकूलित संस्करण मेरे लिए काम करता है

-(void)moveImageForTouches:(NSSet*)touches
{
    UITouch * touch = [touches anyObject];
    CGPoint location = [touch locationInView:self.view];

    if(CGRectContainsPoint(self.imv.frame, location))
    {
        self.imv.center = location;
    }

}

-(void ) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self moveImageForTouches:touches];
}

-(void ) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self moveImageForTouches:touches];
}
0
जोड़ा
नमस्ते। मैंने इस कोड का उपयोग करने की कोशिश की, लेकिन जब आप UIImageView को तेज़ी से ले जाते हैं तो आप आइटम खो देते हैं।
जोड़ा लेखक poppytop, स्रोत