محاولة الحصول على uiimageview للتوقف عن الحركة عندما يضرب حدود الشاشة ... مساعدة!
-
20-09-2019 - |
سؤال
أقوم بصنع تطبيق لعبة بسيط حيث تضغط على زر يسار/يمين ، وتحرك UiimageView ويتحرك. هذه هي المشكلة - أريد أن يتوقف uiimageView
self.view.bounds.size.width
كيف أقوم بهذا العمل؟
هنا هو الكود الحالي:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
if([touch view] == rightbutton){
NSLog(@"touch rightbutton");
player.animationImages = [NSArray arrayWithObjects:
[UIImage imageNamed:@"linkr1.png"],
[UIImage imageNamed:@"linkr2.png"],
[UIImage imageNamed:@"linkr3.png"],
[UIImage imageNamed:@"linkr4.png"],
[UIImage imageNamed:@"linkr5.png"],
[UIImage imageNamed:@"linkr6.png"],
[UIImage imageNamed:@"linkr7.png"],
[UIImage imageNamed:@"linkr8.png"],
nil];
player.animationRepeatCount = 0;
[self.view addSubview:player];
[player startAnimating];
rightbuttontimer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(rightrepeater) userInfo:nil repeats:YES];
}
if([touch view] == leftbutton){
NSLog(@"touch leftbutton");
player.animationImages = [NSArray arrayWithObjects:
[UIImage imageNamed:@"linkr1l.png"],
[UIImage imageNamed:@"linkr2l.png"],
[UIImage imageNamed:@"linkr3l.png"],
[UIImage imageNamed:@"linkr4l.png"],
[UIImage imageNamed:@"linkr5l.png"],
[UIImage imageNamed:@"linkr6l.png"],
[UIImage imageNamed:@"linkr7l.png"],
[UIImage imageNamed:@"linkr8l.png"],
nil];
player.animationRepeatCount = 0;
[self.view addSubview:player];
[player startAnimating];
leftbuttontimer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(leftrepeater) userInfo:nil repeats:YES];
}
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
if([touch view] == rightbutton){
NSLog(@"let go of rightbutton");
[rightbuttontimer invalidate];
[player stopAnimating];
}
if([touch view] == leftbutton){
NSLog(@"let go of leftbutton");
[leftbuttontimer invalidate];
[player stopAnimating];
}
}
- (void)rightrepeater {
CGPoint center = (CGPoint)[player center];
center.x += 10;
[player setCenter:center];
}
- (void)leftrepeater {
CGPoint center = (CGPoint)[player center];
center.x += -10;
[player setCenter:center];
}
سيكون موضع تقدير أي مساعدة. شكرًا!
المحلول
في الخاص بك rightRepeater
طريقة:
- (void)rightrepeater {
CGPoint center = (CGPoint)[player center];
center.x += 10;
CGFloat rightEdge = center.x + [player width]/2;
if (rightEdge > view.bounds.size.width) {
center.x -= (rightEdge - view.bounds.size.width);
}
[player setCenter:center];
}
وبالمثل في الخاص بك leftRepeater
طريقة:
- (void)leftrepeater {
CGPoint center = (CGPoint)[player center];
center.x -= 10;
CGFloat leftEdge = center.x - [player width]/2;
if (leftEdge < 0) {
center.x -= leftEdge;
}
[player setCenter:center];
}
لاحظ أنني استخدمت [player width]
للحصول على عرض كل لاعب. لست متأكدًا مما إذا كانت مثل هذه الطريقة موجودة ، لكن يجب أن تكون كافية لتوضيح المفهوم.
لا تنتمي إلى StackOverflow