-1

我正在开发一个应用程序,其中有一个水平滚动条。滚动区域由不同的颜色组成[只不过UIImageView是颜色]。

滚动区域上方是一个画布[也是一个UIImageView]。

现在,我想要的是,当我在滚动区域中选择任何颜色时,它应该设置在canvas上。

它很像一个颜色选择器,但我已经提供了纯色选项供用户选择。

我应该怎么做?任何让我开始或让我兴奋的示例代码会很棒吗?

谢谢一吨

4

5 回答 5

3

轻松实现它。

  • UIView不使用UIImageView
  • 设置UIView backgroundColor并放置在卷轴上
  • 在视图上设置 UITapGestureRecognizer,参考这里
  • 当一个特定的视图被触摸时,你有它的视图实例被触摸
  • 获取视图的背景颜色并将其设置在滚动条中
于 2013-05-06T06:42:19.660 回答
2

你可以在你的滚动视图中使用 UIButtons 而不是 UIImageViews 来显示要选择的颜色。

这将使实施更容易。用户将选择任何颜色的按钮,您将在按钮操作选择器方法中收到回调。然后根据按钮标签或任何属性,您可以将颜色设置为画布。

在当前的实现中,这将是棘手的,因为您需要知道点击完成的确切内容偏移量才能确定按下了哪个 UIImageView。

编码步骤:

  • 在您的滚动视图中添加 UIButtons 而不是 UIImageView,例如:

    UIButton* button = [[UIButton alloc] initWithFrame:someRect];
    //put some tag to button 
    button.tag = someInt;
    //add selector to each button to get callback
    [view addTarget:self action:@selector(btnSelected:) forControlEvents:UIControlEventTouchUpInside];
    [scrollView addSubview:button];
    
  • 在 btnSelected 方法中放入以下代码:

    -(IBAction)btnSelected:(id)sender;
    {
      UIButton* button = (UIButton*) sender;
    
      if (button.tag == someInt) {
        //do something like
        canvas.backgroundColor = button.backgroundColor;
      }
    }
    
于 2013-05-06T05:58:56.063 回答
1

我不会按照建议使用 UIImageViews 或 UIViews,而是使用自定义 UIButtons 来选择颜色。

UIButton * colorButton;

//You will probably do these inside a for loop
colorButton = [UIButton buttonWithType:UIButtonTypeCustom];
[colorButton setFrame:CGRectMake(X, Y, buttonSize, buttonSize)];

[colorButton setTitle:@"" forState:UIControlStateNormal];

[colorButton setBackgroundColor:SOME_COLOR];
//Border visualization would be good if you are putting buttons side-by-side
[colorButton.layer setBorderWidth:1.0];
[colorButton.layer setBorderColor:[[UIColor darkGrayColor] CGColor]];

//You can use this tag to identify different buttons later
[colorButton setTag:INDEX+SOME_OFFSET]; //use loop index with some offset

[colorButton addTarget:self action:@selector(colorButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

-(void) colorButtonPressed:(UIButton *) sender
{
     UIColor *selectedColor = sender.backgroundColor; //Or identify with sender.tag
     [yourCanvas doSmtOnCanvas:selectedColor];
}
于 2013-05-06T11:33:19.843 回答
1

初始化然后通过调用此方法UIImageView将手势识别器添加到所有人。imageViews

- (void) setupImageView : (UIImageView *) imageView{
    [imageView setUserInteractionEnabled:YES];
    UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(changeUIImageViewBackgroundColor:)];
    tapGestureRecognizer.numberOfTapsRequired = 1;
    [imageView addGestureRecognizer:tapGestureRecognizer];
}

canvasView现在通过以下方式更改选择器内的颜色:

- (void) changeUIImageViewBackgroundColor : (UITapGestureRecognizer *) recognizer{
    UIImageView *imageView = (UIImageView *)[recognizer view];
    [canvasView setBackgroundColor:[imageView backgroundColor]];
}
于 2013-05-06T11:56:57.097 回答
0

您可以在滚动视图中放置一个点击手势,并且每当在滚动中进行点击时,检查点击是否在图像视图上。(您将获得是否在 imageview 上点击点)并根据您可以更改图像。

第二种选择是采用自定义按钮并处理其点击。

希望能帮助到你

于 2013-05-06T05:58:23.627 回答