gpt4 book ai didi

ios - 在屏幕上移动 UIbutton

转载 作者:行者123 更新时间:2023-11-28 22:36:04 25 4
gpt4 key购买 nike

我在屏幕上有很多 UI 按钮,我希望用户能够通过按住按钮然后拖动来移动按钮。我想出了这段代码:

- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {

[[NSUserDefaults standardUserDefaults] synchronize];
[[NSNotificationCenter defaultCenter] postNotificationName:@"MoveAllViewsUpForDrag" object:self userInfo:nil];

//[self.layer removeAllAnimations];

// Retrieve the touch point
CGPoint pt = [[touches anyObject] locationInView:self.view];
startLocation = pt;

originYDraggable = self.frame.origin.y;
originXDraggable = self.frame.origin.x;

[[self superview] bringSubviewToFront:self];

[UIImageView animateWithDuration:0.5 animations:^(void) {

CGRect frame = [self frame];
frame.size.width = frame.size.width + 15;
frame.size.height = frame.size.height + 15;
[self setFrame:frame];

[self setAlpha:0.6];

}];

Draggable* sharedSingleton = [Draggable sharedManagerDraggable];

//nameOfTheMessage = sharedSingleton.namePassedToDraggable;

NSLog(@"%@, %d", sharedSingleton.namePassedToDraggableArray, self.tag);


}

- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event {
// Move relative to the original touch point
CGPoint pt = [[touches anyObject] locationInView:self];
CGRect frame = [self frame];
frame.origin.x += pt.x - startLocation.x;
frame.origin.y += pt.y - startLocation.y;
[self setFrame:frame];
}

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

[[NSUserDefaults standardUserDefaults] synchronize];
[[NSNotificationCenter defaultCenter] postNotificationName:@"MoveAllViewsDownForDrag" object:self userInfo:nil];

CGRect frame = [self frame];
if (frame.origin.y < 50) {

SaveEventsOrganizer* sharedSingletonOrganizer = [SaveEventsOrganizer sharedManagerSaveEventsOrganizer];
Draggable* sharedSingletonDraggable = [Draggable sharedManagerDraggable];

NSString *string = sharedSingletonDraggable.namePassedToDraggableArray[self.tag - 1];

sharedSingletonOrganizer.NameOfEventPassedToOrganizerFromDraggable = string;
[sharedSingletonOrganizer addAnEvent];

[self removeFromSuperview];

}else{

[UIImageView animateWithDuration:0.5 animations:^(void) {

CGRect frame = [self frame];
frame.size.width = frame.size.width - 15;
frame.size.height = frame.size.height - 15;
frame.origin.x = originXDraggable;
frame.origin.y = originYDraggable;
[self setFrame:frame];

[self setAlpha:1.0];

}];

/*CABasicAnimation* anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
[anim setToValue:[NSNumber numberWithFloat:0.0f]];
[anim setFromValue:[NSNumber numberWithDouble:M_PI/80]]; // rotation angle
[anim setDuration:0.1];
[anim setRepeatCount:NSUIntegerMax];
[anim setAutoreverses:YES];
[self.layer addAnimation:anim forKey:@"iconShake"];*/

}
}

唯一的问题是我不知道如何检测按下了哪个按钮来移动它。有什么想法吗??

最佳答案

您可以使用 HitTest 。请参阅我书中的示例:

http://www.apeth.com/iOSBook/ch18.html#_hit_testing

已在您的背景 View 中获取点...

CGPoint pt = [[touches anyObject] locationInView:self.view];

您现在可以点击测试该点位于哪个 subview (按钮),如果有的话:

UIView* v = [self.view hitTest:pt withEvent:nil];

但是,我认为您整体上执行此操作的方式非常复杂。使用手势识别器您可能会更快乐。在我的书中,我还描述了如何使用 UIPanGestureRecognizer 来拖动对象:

http://www.apeth.com/iOSBook/ch18.html#_gesture_recognizers

关于ios - 在屏幕上移动 UIbutton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15991753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com