我正在使用一些用户交互来实现一些图表,例如长按以查看手指下的完整数据,两根手指画线以及其他内容。
首先,我如何在价格图表的横向模式中实现iphone股票应用程序的交互?
操纵黄色垂直线和黄点的CALayer
?那些来自图像还是渲染?使用UIView(或UIImageView)代替?或者在drawRect中渲染它们?
答案 0 :(得分:1)
我认为这只是一个实现细节,所以由如何来完成。我猜他们在 -drawRect 中做了所有事情,但是,如果你愿意的话,可以用Core Animation图层来实现它。
如果您已经使用 -drawRect 绘制图形,那么坚持使用它是有意义的,但是,如果您只想覆盖黄点和垂直黄线的图层您可以使用常规 CALayer 并更改其位置以响应 -touchesMoved 。
// Create a line layer with a 1px width and yellow bg
CALayer *lineLayer = [CALayer layer];
[lineLayer setBounds:CGRectMake(0.0f, 0.0f, 1.0f, parentViewHeight)];
[lineLayer setPosition:CGPointMake(currentX, parentViewHeight/2.0f)];
[lineLayer setBackgroundColor:[[UIColor yellowColor] CGColor]];
[[parentView layer] addSublayer:lineLayer];
// Create a dot layer with the contents set to a CGImageRef
UIImage *dotImage = [UIImage imageNamed:@"yellowdot.png"];
CALayer *dotLayer = [CALayer layer];
[dotLayer setBounds:CGRectMake(0.0f, 0.0f, [dotImage size].width,
[dotImage size].height)];
[dotLayer setPosition:[lineLayer position]];
[dotLayer setContents:[dotImage CGImage]];
[[parentView layer] addSublayer:dotLayer];
您需要在课堂上制作这些图层,以便在收到触摸事件时,您可以更新自己的位置。
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
{
CGPoint current = [[touches anyObject] locationInView:parentView];
[lineLayer setPosition:CGPointMake(current.x, [lineLayer position].y)];
[dotLayer setPosition:CGPointMake(current.x, [self yForStockPriceAtPoint:current])];
[super touchesMoved:touches withEvent:event];
}