通过点击它来改变 UIView/UIControl 的屏幕位置

Posted

技术标签:

【中文标题】通过点击它来改变 UIView/UIControl 的屏幕位置【英文标题】:Changing screen position of UIView/UIControl upon tapping it 【发布时间】:2011-01-20 01:50:35 【问题描述】:

我很清楚这是一个简单的问题。我想了解当用户选择它时如何将 CGRect/UIButton 移动到屏幕上的不同位置。提前感谢您的帮助。

- (void)showMeSomeButtons:(CGRect)frame

    button = [[UIButton alloc] initWithFrame:frame];
    button.frame = CGRectMake(240, 150, 50, 50);

    UIImage *buttonGraphic = [UIImage imageNamed:@"1.png"];

    [button setBackgroundImage:buttonGraphic forState:UIControlStateNormal];
    [button addTarget:self.viewController action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];

    [self addSubview:button];


-(void)buttonClicked

    ???

【问题讨论】:

【参考方案1】:

我认为您需要在@selector(buttonClicked:) 语句中添加:,因为IBActions 需要一个(id)sender 方法属性。

您可以执行类似于以下代码的操作。

- (void)buttonClicked:(id)sender 
   CGRect frame = button.frame;
   frame.origin.x = 500; // new x coordinate
   frame.origin.y = 500; // new y coordinate
   button.frame = frame;

如果你想对其进行动画处理,可以添加 beginAnimation 块。

- (void)buttonClicked:(id)sender 
    CGRect frame = button.frame;
    frame.origin.x = 500; // new x coordinate
    frame.origin.y = 500; // new y coordinate

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration: 0.25];
    button.frame = frame;
    [UIView commitAnimations];
 

【讨论】:

关于这个的两个问题,当我输入顶部代码时,它告诉我“CGRect 没有名为'x'的成员”,对于“y”也是如此,我是否忘记添加一些东西。这也是一个更基本的问题,但是在顶行中添加的(id)发件人是什么?非常感谢。 糟糕。抱歉,刚刚更新了我的答案。其实就是frame.origin.x。 根据docs IBAction 有以下要求:“[…] 返回类型为 void。签名的其余必需部分是单个参数,类型为 id 并命名(按约定)发件人。”所以冒号 not 是可选的。相应地编辑了您的答案。希望你不要介意。【参考方案2】:

CGRectOffset(rect, dx, dy)

将矩形的原点移动 delta X 和 Y。

【讨论】:

以上是关于通过点击它来改变 UIView/UIControl 的屏幕位置的主要内容,如果未能解决你的问题,请参考以下文章

AMD RADEON RX 6900 XT 旗舰显卡它来了!

试图通过改变它的类来改变元素的行为。 - .on("点击")

如何通过仅在用户滚动到特定部分时调用它来减少谷歌地图 API 命中数

如何通过点击角来改变 CAShapeLayer 中的多边形形状?

,为啥这个 JavaScript 程序(DIGITAL TIMER)不工作,当我点击它来启动计时器时?

css3如何通过点击改变样式