如何通过在iOS中触摸来移动对象

时间:2013-04-25 08:32:27

标签: ios objective-c cocoa-touch

我是Objective-C的新手,并尝试制作一个简单的应用程序,当你触摸对象时,它将随机移动一段时间并停止。然后你需要再次触摸它,这样它会再次移动并在一段时间后停止。

我搜索了触摸方法和一些教程,但问题是我不知道如何开始。这就像我需要一个移动对象的功能和一个触摸它的功能,但我不知道如何连接它们并使用它们。

这是一个教程,它帮助我获得了很多功能,它实际上以与我的应用程序相反的方式运行。但我仍然无法自己开始编程。

http://xcodenoobies.blogspot.se/2010/11/under-construction.html

关于如何编程我的逻辑以及如何找到正确的方法以及如何找到我需要的变量类型,我们将不胜感激。

5 个答案:

答案 0 :(得分:2)

第1步:将此代码放入ViewDidLoad方法中,我已在其中创建了一些UIImageView并将其添加到“随机查看”

[self.view setTag:1];
for(int i=0;i<4;i++)
{
    int x = arc4random()%300;
    int y = arc4random()%400;

#warning set Image here

    UIImageView *imgview = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"someImage.png"]];
    [imgview setFrame:CGRectMake(x, y, 25, 25)];
    [imgview setUserInteractionEnabled:YES];
    [self.view addSubview:imgview];
}

第2步:定义touchBegan方法来处理触摸并在视图周围移动对象,我们为ViewController设置了Tag = 1,因为我们不想移动主视图,只会移动子视图

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

    if([[touch view] tag] != 1)
    {
        [UIView animateWithDuration:0.25f animations:^{
            int x = arc4random()%300;
            int y = arc4random()%400;

            [[touch view] setCenter:CGPointMake(x, y)];
        }];
    }
}

答案 1 :(得分:1)

您需要将手势识别器添加到您想要触摸的视图中:

// In a view controller or in a UIView subclass
UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
[self addGestureRecognizer:tapGestureRecognizer];
// Or [self.view addGestureRecognizer:tapGestureRecognizer];

- (void)handleTap:(UITapGestureRecognizer *)sender
{
    if (sender.state == UIGestureRecognizerStateEnded) {
        // Animate the view, move it around for a while etc.
        // For animating a view use animateWithDuration:animations:
    }
}

答案 2 :(得分:1)

实际上Apple为此做了一个演示。

http://developer.apple.com/library/ios/#samplecode/MoveMe/Introduction/Intro.html

您可以尝试根据需要修改此代码。以及在哪里寻找实际功能:

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

如果这是您要找的答案,请点击“已回答”,以便将此问题视为已结束: - )。

答案 3 :(得分:1)

如果我告诉你,我会说实现你要求的最简单方法是在Interface Builder中创建一个UIButton并将其连接到一个IBAction,将其移动到一个随机点。然后你可以添加一个自定义图形按钮..

  1. 在ViewController中创建一个返回类型为IBAction
  2. 的公共方法
  3. 在IB中创建一个按钮,并将其“Touch Up Inside”插座连接到您的IBAction
  4. 我的IBAction方法,在屏幕边界内生成一个随机的x和y坐标,并将运动设置为此点。
  5. 我将/不能详细介绍具体代码,因为它会占用很多空间。 请注意,您的问题是非常开放和模糊的,这在StackOverflow上不被认为是好的风格。此外,你可能不想保存像动画这样的东西,直到你对iOS和Objective-C更有经验

    -V

答案 4 :(得分:0)

  • (void)touchesBegan:(NSSet *)触及withEvent:(UIEvent *)事件;

是用户触摸视图时调用的方法。如果你在主视图(大视图)中覆盖它,你必须找到触摸点是否是对象所在的一些辅助方法,如链接中所述。否则你可以覆盖你的对象的类&amp;实现该方法,这样你就不必明确地找到触摸点是否在对象上。

满足您的要求。我会说覆盖uiimageview&amp;在内部,使touchesbegan实现它将正常工作。

.h file 

@interface StarView : UIImageView

@end

.m file 

@implementation StarView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    // your code in the link with the related methods

Destination = CGPointMake(arc4random() % 320, arc4random() % 480);   

// calculate steps based on speed specified and distance between the current location of the sprite and the new destination  

xamt = ((Destination.x - self.center.x) / speed);  

yamt = ((Destination.y - self.center.y) / speed);  

// ask timer to execute moveBall repeatedly each 0.2 seconds. Execute the timer.   

mainTimer = [NSTimer scheduledTimerWithTimeInterval:(0.02) target:self selector:@selector(moveBall) userInfo:nil repeats: NO]; 
}

不要忘记在此之后复制moveBall方法。

在您的主视图中,只需制作一个StarView&amp;添加到主视图