2010-08-12 42 views
0

我正在实现一些用户交互的图表,比如长按查看手指下的全部数据,用两根手指画线和其他东西。Stockapp类型的交互 - UIView x CALayer

首先,我将如何实现iphone股票应用程序在价格图的横向模式下进行的交互?

操纵一个CALayer为黄色的垂直线和黄点?那些来自图像或渲染?使用UIView(或UIImageView)?或者在drawRect中渲染它们?

回答

1

我认为这实际上只是一个实施细节,所以它取决于你如何做到这一点。我猜想他们正在做的一切都在-drawRect,但是,如果你愿意,你可以用Core Animation层来实现它。

如果您已经绘制与-drawRect图,那么它将使感但是坚持说,如果你只是想覆盖层的黄点,你可以只使用垂直黄线常规CALayer s并更改其位置以响应-托架移动

// 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]; 
}