1

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

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

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

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

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

4

5 回答 5

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方法来处理视图周围的触摸和移动对象,我们设置了Tag = 1 ViewController,因为我们不想移动我们的主视图,只有子视图会被移动

- (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)];
        }];
    }
}
于 2013-04-25T08:50:10.447 回答
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:
    }
}
于 2013-04-25T08:46:08.997 回答
1

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

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 

如果这是您要寻找的答案,请单击“已回答”,因此可以将此问题视为已关闭:-)。

于 2013-04-25T08:47:31.150 回答
1

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

  1. 在 ViewController 中创建一个返回类型为 IBAction 的公共方法
  2. 在 IB 中创建一个按钮并将其“Touch Up Inside”插座连接到您的 IBAction
  3. 在您的 IBAction 方法中,在屏幕边界内生成一个随机的 x 和 y 坐标,并为该点设置动画。

我将/不能详细介绍特定代码,因为它会占用很多空间。请注意,您的问题非常开放且含糊不清,这在 StackOverflow 上被视为不好的风格。此外,在您对 iOS 和 Objective-C 有更多经验之前,您可能不想保存动画之类的东西

-V

于 2013-04-25T08:47:57.950 回答
0
  • (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;

是用户触摸视图时调用的方法。如果您在主视图(大视图)中覆盖它,您将不得不使用链接中描述的一些辅助方法来查找接触点是否是对象所在的位置。否则,您可以覆盖对象的类并实现该方法,因此您不必显式查找触摸点是否在对象上。

为您的要求。我会说覆盖 uiimageview & 在里面放置 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 实例并添加到主视图

于 2013-04-25T08:49:33.330 回答