我在 Objective-C 上工作了 1 年,这是我提出的第一个问题,因为我总是在这个网站上找到答案,但这种情况完全是疯狂的,没有发现任何类似的东西。
我有一个自定义类(从 UIView 称为 BallClass)。UIView 内部有一个 UIImageView 和一个用于执行操作的 UITapGesture。
因此,当我在 UIViewController 中创建对象时,在按下对象时不工作 tapAction,但如果我切换到其他屏幕并返回它,则 tapGesture 工作完美。
我尝试了很多选择,但我无法在第一次加载时完成工作。
我使用 ARC、Xcode (4.6.3) 和 OSX (10.8.4) 和 IB,但是这个对象是在没有 IB 的情况下创建的。
提前致谢。
这是类 BallClass.m
- (void)tapGesture:(UIGestureRecognizer *)tapGesture {
NSLog(@"hola");
}
- (id)initBall:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
// Initialization code
// Recibir las variables iniciales para el control del timer
ball = [[Ball alloc] init];
// Agregar la imagen de la pelota en el view
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, self.frame.size.height)];
[imageView setCenter:CGPointMake(CGRectGetMidX([self bounds]), CGRectGetMidY([self bounds]))];
[imageView setContentMode:UIViewContentModeScaleAspectFit];
[imageView setImage:[UIImage imageNamed:@"pelota.png"]];
[imageView setTag:100];
[imageView setNeedsDisplay];
// Add TAP
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGesture:)];
// Tap Properties
[tapGesture setDelaysTouchesBegan:YES];
[tapGesture setNumberOfTapsRequired:1];
[tapGesture setDelegate:(id)self];
[imageView addGestureRecognizer:tapGesture];
[self addSubview:imageView];
[self setNeedsDisplay];
// Propiedades del View
[self setUserInteractionEnabled:YES];
self.backgroundColor = [UIColor clearColor];
[self setTag:100];
// BALL BOUNCE
[NSTimer scheduledTimerWithTimeInterval:1.0 / 30.0 target:self selector:@selector(onTimer:) userInfo:nil repeats:YES];
}
return self;
}
- (void)onTimer:(NSTimer *)timerLocal {
// Do something
}
... // more methods
这是实例化:
ballView00 = [[BallView alloc] initBall:CGRectMake(10, 10, 40, 40)];
UiView 显示完美,动画效果很好,但 UITapGesture 只是工作,如前所述,重新加载 ViewController 后。
这是 Ball 和 UIView (@kBall) 的图像链接。抱歉,关于图像,但我在获得 10 分之前无法加载 :(