- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 MKMapView
实例,并且希望使用自定义注释图标而不是 MKPinAnnotationView 提供的标准图钉图标。因此,我设置了一个名为 CustomMapAnnotation 的 MKAnnotationView 子类,并重写 -(void)drawRect:
来绘制 CGImage。这有效。
当我尝试复制 MKPinAnnotationView 提供的 .animatesDrop
功能时,麻烦就来了;当注释添加到 MKMapView
实例时,我希望我的图标能够逐渐显示,从上方按从左到右的顺序下降。
这里是 -(void)drawRect: 用于 CustomMapAnnotation,它在您仅绘制 UIImage 时起作用(这就是第二行的作用):
- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
[((Incident *)self.annotation).smallIcon drawInRect:rect];
if (newAnnotation) {
[self animateDrop];
newAnnotation = NO;
}
}
当您添加 animateDrop
方法时,麻烦就来了:
-(void)animateDrop {
CGContextRef myContext = UIGraphicsGetCurrentContext();
CGPoint finalPos = self.center;
CGPoint startPos = CGPointMake(self.center.x, self.center.y-480.0);
self.layer.position = startPos;
CABasicAnimation *theAnimation;
theAnimation=[CABasicAnimation animationWithKeyPath:@"position"];
theAnimation.fromValue=[NSValue valueWithCGPoint:startPos];
theAnimation.toValue=[NSValue valueWithCGPoint:finalPos];
theAnimation.removedOnCompletion = NO;
theAnimation.fillMode = kCAFillModeForwards;
theAnimation.delegate = self;
theAnimation.beginTime = 5.0 * (self.center.x/320.0);
theAnimation.duration = 1.0;
[self.layer addAnimation:theAnimation forKey:@""];
}
它就是行不通,而且可能有很多原因。我现在不会讨论所有这些。我想知道的主要事情是这种方法是否合理,或者我是否应该尝试一些完全不同的东西。
我还尝试将整个事情打包到动画事务中,以便 beginTime 参数实际上可以工作;这似乎根本没有做任何事情。我不知道这是因为我遗漏了一些关键点,还是因为 MapKit 以某种方式破坏了我的动画。
// Does nothing
[CATransaction begin];
[map addAnnotations:list];
[CATransaction commit];
如果有人有像这样的动画 MKMapAnnotations 的经验,我希望得到一些提示,否则如果您可以提供 CAAnimation 有关该方法的建议,那就太好了。
最佳答案
Paul Shapiro 的代码的一个问题是,当您在用户当前正在查看的位置下方添加注释时,它不会处理。这些注释在掉落之前会漂浮在半空中,因为它们已移动到用户的可见 map 矩形中。
另一个是它还会删除用户位置蓝点。使用下面的代码,您可以在屏幕外处理用户位置和大量 map 注释。我还添加了一个漂亮的弹跳;)
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
MKAnnotationView *aV;
for (aV in views) {
// Don't pin drop if annotation is user location
if ([aV.annotation isKindOfClass:[MKUserLocation class]]) {
continue;
}
// Check if current annotation is inside visible map rect, else go to next one
MKMapPoint point = MKMapPointForCoordinate(aV.annotation.coordinate);
if (!MKMapRectContainsPoint(self.mapView.visibleMapRect, point)) {
continue;
}
CGRect endFrame = aV.frame;
// Move annotation out of view
aV.frame = CGRectMake(aV.frame.origin.x, aV.frame.origin.y - self.view.frame.size.height, aV.frame.size.width, aV.frame.size.height);
// Animate drop
[UIView animateWithDuration:0.5 delay:0.04*[views indexOfObject:aV] options:UIViewAnimationCurveLinear animations:^{
aV.frame = endFrame;
// Animate squash
}completion:^(BOOL finished){
if (finished) {
[UIView animateWithDuration:0.05 animations:^{
aV.transform = CGAffineTransformMakeScale(1.0, 0.8);
}completion:^(BOOL finished){
[UIView animateWithDuration:0.1 animations:^{
aV.transform = CGAffineTransformIdentity;
}];
}];
}
}];
}
}
关于iphone - 如何使用 MKAnnotationView 创建自定义 "pin-drop"动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1857160/
MKPinAnnotationView 不允许您使用自定义图像作为“图钉”并同时启用拖动,因为一旦您开始拖动图像就会变回默认图钉。因此,我使用 MKAnnotationView 而不是 MKPinAn
我正在尝试通过动画使我的注释淡入淡出,因此我使用 0 的 alpha 创建它们,然后在 didAddAnnotation 中将它们的 alpha 设置为 1。有时我只添加一些注释,减去其他注释,但现在
我使用此代码创建我的自定义注释 View 。 - (MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id )annotati
iPhone SDK map 上的标注气泡上,标题和副标题属性的字体是否可以更改。 我对标注气泡中显示的默认字体不满意,并且想使用不同的字体来匹配我的应用程序的其余部分。然而,我没有看到太多提及这一点
我在MKMapView上添加了一个MKAnnotationView,当我长按它时,我希望它可以被抬起并移动到另一个位置。 如何做?特别感谢! 最佳答案 适用于 iOS 4.0 或更高版本 摘自 App
实际上,我正在我的应用程序中开发一些东西,它可以在我的 MKMapView 中显示注释这些注释应该是可单击的并将参数传递给方法。 现在的问题是如何在点击披露按钮时将参数传递给下一个函数。 对于注释的格
我一直在尝试创建一个必须显示多行文本的 MKAnnotationView。 有人指示我做下面网址中所说的事情 How to add more details in MKAnnotation in iO
我正在尝试在 MapKit 中模拟用户位置动画(其中用户的位置由脉动的蓝点表示)。我创建了 MKAnnotationView 的自定义子类,并在 drawRect 方法中尝试循环一组颜色。这是我正在做
我有一个MKAnnotationView ( draggable 属性设置为 YES )使用自定义图像,通过 image 设置属性(property)。当注释添加到 map 时,它具有自定义图像。但当
我已经对 MKAnnotationView 进行了子类化,以创建一个注释,该注释基本上通过重写 drawRect 来围绕 map View 上的点绘制一个圆。在以下情况下(在模拟器中),圆圈绘制得很好
我很难弄清楚如何让用户一次在 map 上选择多个注释。我的 annotationViews 不显示标注,但 annotationView 的图像在选择时会发生变化。有没有一种简单的方法来启用这种行为?
我在这里使用 Daniel 提供的自定义 MKAnnotationView 动画:Subclassing MKAnnotationView and overriding setDragState但我遇
我喜欢 iOS 6 中新的自动布局功能,但是在将它与我的 MKAnnotationView 子类结合使用时遇到了一些麻烦。 我在初始化方法中禁用了自动调整掩码转换。 self.translatesAu
我使用此代码在 Swift 中创建一个简单的 MKAnnotationView 标注。 let local_parking = CustomAnnotation() local_par
以下代码返回几个编译器错误: override init(frame: CGRect) { //Initializer does not override a designated initializ
在我的代码中,我使用Apple map 并在 View Controller 中正确设置mapView和自身的委托(delegate)。 在我的 ViewController 中,我还在 for 循环
我想根据它们代表的相对时间在 UIMapView 中显示不同颜色的图钉 但似乎 mapView:viewForAnnotation: 方法的作用与调用时间无关。 在我的代码示例中,我已经将文件中较早和
大家好,提前致谢 =) 我对 MKMapView 和 MKAnnotationView 有疑问。我需要在 MKMapView 上显示带有自定义图像的注释。为此,根据几个教程和其他 stackoverf
当您设置 MKAnnotationView 的可拖动属性时,默认行为似乎是: 1) 用户点击注释 2) 用户拖动注释 是否可以将其合二为一,以便用户无需先点击即可拖动注释? 最佳答案 试试这个源代码
我在一段时间 [4 秒] 后隐藏 MKAnnotationView 时遇到问题。我有一个名为 mapView 的 MKMapView,它使用 MKUserLocation 显示用户位置,我在他的
我是一名优秀的程序员,十分优秀!