2010-08-10 9 views

Antwort

13
  • Erstellen Sie Ihre UIView und konfigurieren Sie es (oder eine Unterklasse davon, wie ein UIImageView)
  • Stellen Sie die Position des Bildes zu sein, wo der Benutzer berührt:

Es gibt vier delegieren Sie Methoden zum Akzeptieren von Berührungsereignissen, die Teil einer Klasse sind, die von UIResponder wie UIView erbt. Verwenden Sie die Delegatmethode, die für Sie am geeignetsten ist. Wenn Sie es mit Ihrem Finger folgen wollen, wird dies -touchesMoved sein:

- (void) touchesMoved:(NSSet*)toucheswithEvent:(UIEvent*)event {   
    CGPoint pt = [[touches anyObject] locationInView:self]; 
    myImageView.center = pt; 
} 

Andere Delegatmethoden für Sie da sind:

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

ich ein Beispiel-Anwendung geschrieben, die genau das tut, was Sie wollen. Es ist eine Demo von Grafiken Quartz 2D-Zeichnung, aber es zieht ein rotes Quadrat und schwarzen Kreis, wo Sie Ihre Finger ziehen und sollte einfach genug sein, zu folgen:

alt text http://brockwoolf.com/shares/stackoverflow/3445494/screen.png

Download Xcode project (32kb)

+1

Der Link unten ist, können Sie es aktualisieren, bitte? Ich habe genau das gleiche Problem! – Seb

1

gibt es hier einen ausgezeichneten Beitrag.

von Divan Visagie

hier ist der entsprechende Code (aus dem obigen Link genommen):

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 

    //Find the path for the menu resource and load it into the menu array 
    NSString *menuPlistPath = [[NSBundle mainBundle] pathForResource:@"Menu" ofType:@"plist"]; 

    menuArray = [[NSArray alloc] initWithContentsOfFile:menuPlistPath]; 

    //add some gestures 
// UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeLeft:)]; 
// [swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft]; 
    //[self.view addGestureRecognizer:swipeLeft]; 

// UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeRight:)]; 
// [swipeRight setDirection:UISwipeGestureRecognizerDirectionRight]; 
    //[self.view addGestureRecognizer:swipeRight]; 

} 



float difference; 
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    CGPoint contentTouchPoint = [[touches anyObject] locationInView:content]; 
    difference = contentTouchPoint.x; 
} 


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

    CGPoint pointInView = [[touches anyObject] locationInView:self.view]; 

    float xTarget = pointInView.x - difference; 
    if(xTarget > menuTable.frame.size.width) 
     xTarget = menuTable.frame.size.width; 
    else if(xTarget < 0) 
     xTarget = 0; 

    [UIView animateWithDuration:.25 
        animations:^{ 

         [content setFrame:CGRectMake(xTarget, content.frame.origin.y, content.frame.size.width, content.frame.size.height)]; 
        } 
    ]; 
} 


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


    CGPoint endPoint = [[touches anyObject] locationInView:self.view]; 
    float xTarget = endPoint.x - difference; 
    if(xTarget < (menuTable.frame.size.width/2)) 
     xTarget = 0; 
    else 
     xTarget = menuTable.frame.size.width; 

    [UIView animateWithDuration:.25 
        animations:^{ 

         [content setFrame:CGRectMake(xTarget, content.frame.origin.y, content.frame.size.width, content.frame.size.height)]; 
        } 
    ]; 
} 
Verwandte Themen