您好我试图在用户点击屏幕的位置添加一个按钮。
以下是我的UIView文件中的代码
- (void)drawRect:(CGRect)rect {
// Drawing code
NSLog(@"drawRect, %i, %i", firstTouch.x, firstTouch.y);
[tagButton drawRect:CGRectMake(firstTouch.x, firstTouch.y, 100, 200)];
[self addSubview:tagButton];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
firstTouch = [touch locationInView:self];
[self setNeedsDisplay];
}
这是来自firstTouch的日志
2009-10-01 17:27:23.743 text [2521:207] drawRect,0,1080311808
如何获得触摸的x,y点,并在该点上创建一个uibutton?
任何帮助将不胜感激,谢谢
这就是我提出的,它将按钮添加到视图中。但是当我弹出这个视图时,它会崩溃。我似乎无法找到任何问题。任何人都可以看到问题所在吗?
UIButton *newButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[newButton setFrame:CGRectMake(self.firstTouch.x, self.firstTouch.y, width, 17)];
[newButton setTitle:[textField text] forState:UIControlStateNormal];
[newButton setFont:[UIFont boldSystemFontOfSize:12]];
[newButton setShowsTouchWhenHighlighted:YES];
[newButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[newButton setTitleShadowColor:[UIColor blackColor] forState:UIControlStateNormal];
[newButton setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];
[newButton setContentVerticalAlignment:UIControlContentVerticalAlignmentCenter];
[newButton setBackgroundColor:[UIColor clearColor]];
UIImage *bgImg = [[UIImage imageNamed:@"button_greyblue.png"] stretchableImageWithLeftCapWidth:15.0 topCapHeight:0.0];
[newButton setBackgroundImage:bgImg forState:UIControlStateNormal];
[self setTagButton:newButton];
[self.view addSubview:tagButton];
[newButton release];
答案 0 :(得分:0)
您获得这些值是因为您使用的是%i。
firstTouch.x和.y值实际上是浮点数,所以你应该在NSLog中使用%f。
要添加按钮,您每次都必须分配一个新按钮(专家,如果我错了,请纠正我)。
除此之外,其余代码看起来足够好,可以在点击点上添加按钮。
哦,是的,你可以在touchBegan方法本身获得firstTouch.x和firstTouch.y,并在那里添加一个按钮。
答案 1 :(得分:0)
我认为你不想直接调用drawRect。在touchesBegan中捕获你的touchLocation,然后仍然在touchesBegan中更新你的tagButton的框架。 Apple提供了一个名为MoveMe的示例应用程序,它非常简单,有助于说明这一点。
此外,这些点表示为浮动而不是整数,因此请使用%f而不是%i
回应你的新“问题”:你似乎过度释放了newButton。记住规则......如果你通过alloc,new或copy获得对象,那么你需要释放它。如果没有,那么你没有。所以你的应用程序崩溃了,因为你过度释放了那个按钮。删除 [newButton发布] ,事情应该没问题......