【问题标题】:adding gesturerecongnizer programmatically以编程方式添加手势识别器
【发布时间】:2012-02-19 19:04:40
【问题描述】:

我知道如何通过 IB 添加手势识别器,但我试图在不使用 IB 的情况下解决这个问题。

所以现在基本上是

blue1.userInteractionEnabled = YES;
UIPanGestureRecognizer *pgr = [[UIPanGestureRecognizer alloc] 
                               initWithTarget:self action:@selector(handlePan:)];

[blue1 addGestureRecognizer:pgr];
[pgr release];

我的handlePan是

-(IBAction)handlePan:(UIPanGestureRecognizer *)recognizer {

    CGPoint translation = [recognizer translationInView:self.view];

    recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x, recognizer.view.center.y + translation.y);

    [recognizer setTranslation:CGPointMake(0, 0) inView:self.view];

}

如果我通过 IB 执行此操作,并且我可以将这件作品拍摄成电影,这会很好。

我不明白是什么导致它不像现在编码的那样移动。

感谢任何帮助。

我还在我的 handlePan 中尝试了 -(void) 而不是 -(IBAction) ,但这也没有用。

【问题讨论】:

  • 您的第一个代码段在哪里?是在某处的init 方法中吗?
  • 第一个代码段位于从 viewdidload 调用的方法中。这是我想在视图加载后立即运行的方法。
  • 你为什么写[pgr release];?您是否在此示例中没有使用 ARC,还是在创建和添加手势识别器时需要使用 ARC?

标签: iphone objective-c ios xcode


【解决方案1】:

这在 IB 中有效,但在代码中无效,这表明错误出现在第一个代码块中。我怀疑blue1nil。确保不要尝试在viewDidLoad 之前修改视图。在initWithFrame:awakeFromNib 中它们都将是nil

【讨论】:

  • 谢谢,原来我在将另一个变量设置为 true 之前调用了这个方法,所以它跳过了这部分,因为另一个变量是 false。
【解决方案2】:
override func viewDidLoad() {
    let tap = UITapGestureRecognizer(target: self, action: #selector(imageTapped(_:)))

    myImage.isUserInteractionEnabled = true
    myImage.addGestureRecognizer(tap)
}

@objc func imageTapped(_ sender: UITapGestureRecognizer) {
    print(#function)
}

【讨论】:

    猜你喜欢
    • 2019-03-27
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多