高仿美团<四>

作者: 土鳖不土 | 来源:发表于2015-10-08 08:58 被阅读5602次

粉友们我又回来了。国庆回莆田老家几天没有coding就感觉手痒+满满的罪恶感。这个我里我想对所有的简友(尤其是"只因我为足球而生")和我自己说声抱歉。在高仿美团三里面就说要把github地址贴出来。然后一直拖延到现在。优秀是一种习惯。很明显我还需努力。这段时间我想了好多好多。什么都想做什么都止步不前。这篇最想和大家共勉的一句是:

相信自己。专注一点,再专注一点,你离成功就会更近一点。

话不多说了上效果了:


自定义气泡

机上一个版本说我会独立出来讲下这个东东,觉得在这里说下也很合适
首先抛开项目不谈:
一步一步来怎么画这个气泡的呢?

1.自定义气泡
2.自定义标注

屏幕快照 2015-10-07 21.25.30.png

很明显他是一个view,所有就自定义一个view然后继承于UIView
代码如下:

- (void)drawRect:(CGRect)rect {
    [self drawInContext:UIGraphicsGetCurrentContext()];
    
    self.layer.shadowColor = [[UIColor clearColor] CGColor];
    self.layer.shadowOpacity = 1.0;
    self.layer.shadowOffset = CGSizeMake(0.0f, 0.0f);

}

-(void)drawInContext:(CGContextRef)context{
    //设置当前图形的宽度
    CGContextSetLineWidth(context, 2.0);
    //填充泡泡颜色并设置透明度
   // CGContextSetFillColorWithColor(context, [UIColor colorWithRed:0.3 green:0.3 blue:0.3 alpha:0.8].CGColor);
    //填充的颜色
    CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);

    //
    [self getDrawPath:context];

    //填充形状内的颜色
    CGContextFillPath(context);
}
//  200, 70
-(void)getDrawPath:(CGContextRef)context{
    //取出当前的图形大小
    CGRect rrect = self.bounds;
    NSLog(@"%f", self.frame.size.width);
    NSLog(@"%f", self.frame.size.height);

    //设置园弧度
    CGFloat radius = 30.0;
    
    CGFloat minx = CGRectGetMinX(rrect),//0
    //中点
    midx = CGRectGetMidX(rrect),//100
    //最大的宽度的X
    maxx = CGRectGetMaxX(rrect);//200
    CGFloat miny = CGRectGetMinY(rrect),//0
    //最大的高度Y
    maxy = CGRectGetMaxY(rrect)-kArrorHeight;//60
    
    //1.画向下的三角形
    //2.设置起点三角形的右边点为起点
    CGContextMoveToPoint(context, midx+kArrorHeight, maxy);
    //3.连线 右边点  ->连最下面上下面的点
    CGContextAddLineToPoint(context, midx, maxy+kArrorHeight);//画直线
    //4.最下面的点连上  最左边的点。
    CGContextAddLineToPoint(context, midx-kArrorHeight, maxy);
    
    //画4个圆弧
    //    CGContextAddArcToPoint(context, x1, y1, x2, y2, CGfloat radius );//画完后 current point不在minx,miny,而是在圆弧结束的地方

    CGContextAddArcToPoint(context, minx, maxy, minx, miny, radius);//画完后 current point不在minx,miny,而是在圆弧结束的地方
    CGContextAddArcToPoint(context, minx, miny, maxx, miny, radius);
    CGContextAddArcToPoint(context, maxx, miny, maxx, maxy, radius);
    CGContextAddArcToPoint(context, maxx, maxy, midx, maxy, radius);
    CGContextClosePath(context);
}

注释已经很清楚了。
自定义气泡已经有了接下来就自定义标注。

百度原始的标注效果图
/**
 *  通过mapView快速创建一个annotationView
 */
+(instancetype)annotationViewWithMapView:(BMKMapView *)mapView viewForAnnotation:(id <BMKAnnotation>)annotation
{
    if ([annotation isKindOfClass:[BMKPointAnnotation class]])
    {
        static NSString *reuseIndetifier = @"annotationReuseIndetifier";
        JFAnnotationView *annotationView = (JFAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:reuseIndetifier];
        if (annotationView == nil)
        {
            annotationView = [[JFAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:reuseIndetifier];
        }
        if ([annotation isKindOfClass:[JFAnnotation class]]){
            annotationView.jfannotation = (JFAnnotation *)annotation;
        }
        annotationView.canShowCallout = NO;
     ###只要只需这一句是不是很easy 
   annotationView.image = [UIImage imageNamed:@"icon_map_cateid_1"];

        // 设置中⼼心点偏移,使得标注底部中间点成为经纬度对应点
        
        // annotationView.centerOffset = CGPointMake(0, -18);
        return annotationView;
    }
    return nil;
}

那么标注和气泡怎么关联在一起?

-(void)setSelected:(BOOL)selected animated:(BOOL)animated{

    if (self.selected == selected) {
        return;
    }
    if (selected) {
        if (self.calloutView == nil) {
            self.calloutView = [[JFCalloutView alloc] initWithFrame:CGRectMake(0, 0, kCalloutWidth, kCalloutHeight)];
            
            self.calloutView.center = CGPointMake(CGRectGetWidth(self.bounds) / 2.f + self.calloutOffset.x,-CGRectGetHeight(self.calloutView.bounds) / 2.f + self.calloutOffset.y);
        }
        NSString *imgUrl = [self.jfannotation.jfModel.imgurl stringByReplacingOccurrencesOfString:@"w.h" withString:@"104.63"];
        [self.calloutView.imageView sd_setImageWithURL:[NSURL URLWithString:imgUrl] placeholderImage:[UIImage imageNamed:@"bg_customReview_image_default"]];
        self.calloutView.title = self.annotation.title;
        self.calloutView.subtitle = self.annotation.subtitle;
        [self addSubview:self.calloutView];
    }else{
        [self.calloutView removeFromSuperview];
    }
    [super setSelected:selected animated:animated];
    
}

在自定义气泡的view里面加你想加的控件,数据等等。
然后在自定义的annotation模型里面依次添加这些属性。
具体看我源码里面已经很清楚里,如果还是有问题的可以提出来我们一起coding.

我的.gif

这两个界面也是webview

高仿美团四就到这里了,本项目继续更新中。。。

源码链接:https://github.com/tubie/JFMeiTuan

屏幕快照 2015-10-08 08.55.27.png

有问题可以提出来我很乐意和大家一起分享。喜欢的话给我一个小星星我会很开心的。同时也希望你能够继续关注我。

相关文章

  • 高仿美团<四>

    粉友们我又回来了。国庆回莆田老家几天没有coding就感觉手痒+满满的罪恶感。这个我里我想对所有的简友(尤其是"只...

  • 高仿美团<三>

    亲爱的粉友们,高仿美团<三>终于和大家见面了 首先感谢你们的一直关注。同时也感谢我自己。曾经c++挂科,java接...

  • 高仿美团<二>

    亲爱的粉友们我又回来了。 继上一次高仿美团主界面之后我说我会持续更新的,还说重要的事情说三遍。由于最近项目比较紧就...

  • 高仿美团主界面<一>

    声明:本demo还未完善,正在持续更新中。。。 先上图吧: 这个小demo资源图片全是用青花瓷抠出来的,现在只是完...

  • Mybatis中特殊符号转移

    1. 写法1 原符号替换符号<<<=<=>>>=>=<><>&&'&a...

  • test

    <script>alert(1);</script>

  • 无标题文章

    <script>alert('hello’);</script>

  • Mybatis 中大于等于小于等于的写法

    第一种写法:原符号 < <= > >= & ' "替换符号 < <= > >= &a...

  • MyBatis大于小于转义

    说明小于小于等于大于大于等于&'''原符号<<=>>=&'"替换符号<<=>>=&...

  • Mybatis中 < > <= >= 等符号的使用

    一、转移字符 >= 对应 >= > 对应 > <= 对应 <= ...

网友评论

  • 从小玩到大的青梅竹马:博主你好,我遇到了

    While reading /Users/MrLi/Downloads/JFMeiTuan-master/JFMeiTuan/Class/Resource/icon_mydream.png pngcrush caught libpng error:
    Not a PNG file..

    Could not find file: /Users/MrLi/Library/Developer/Xcode/DerivedData/JFMeiTuan-bykwwlohzkxhwedypnjicrgslzqv/Build/Products/Debug-iphonesimulator/JFMeiTuan.app/icon_mydream.png
    Command /Applications/Xcode.app/Contents/Developer/usr/bin/copypng emitted errors but did not return a nonzero exit code to indicate failure
    这个怎么破 在运行的时候 模拟器能跑 但是就有这个报错
    土鳖不土:@此用户等级已最高 把这张图片删掉就行了 不过这个高仿demo还有不少问题。后续会抽出一点时间在完善下
    从小玩到大的青梅竹马:@tubiebutu 好 万分感谢
    土鳖不土:@此用户等级已最高 我周末给你答复
  • Unchastity:URL地址如何抓起
    Unchastity:@tubiebutu 谢谢🙏
    土鳖不土:@Unchastity 青花瓷
  • 小涛先生呢:你好,请教个问题,首页第四组数据urlWithHotQueue的urlStr报"%比数据转换参数"的警告,然后responseBody打印data是空,首页界面的热门排队的数据也是不显示,GetUrlString里我该怎么改呢?谢谢 (好像源码就是不显示的有点问题)
    土鳖不土:@_小涛 好的,我等会看下
  • 小涛先生呢:一运行就崩...
    土鳖不土:@_小涛 好的,我马上看下,谢谢你的反馈。
    小涛先生呢:@tubiebutu 昨天写还好好的,今天就崩了,好像是无法同时满足约束条件。我以为我代码改动了问题,从新clone了一份新的,还是崩,望大神解决谢谢
    土鳖不土:@_小涛 怎么问题?
  • hrscy:楼主您好,我最近也在使用百度图地图sdk,也是自定义的标注,但是遇到了一个问题,有的时候自定义的标注不出现,而是出现默认的红色大头针,但是有的时候能显示自定义的标注图片,请问楼主遇到过吗?我的问题链接如图
    http://bbs.lbsyun.baidu.com/forum.php?mod=viewthread&amp;tid=103501&fromuid=469520
    (出处: 百度地图开放平台)
    麻烦楼主帮我看一下可以吗?
    这个问题困扰我很多天了,一直解决不了..... :pray: :pray:
    土鳖不土:@hrscy 就是复用,类似tableViewCell的复用
    hrscy:@tubiebutu 循环利用是怎么实现呢? :flushed:
    土鳖不土:@hrscy 我看不到的你问题,但是我猜是没有循环利用标注
  • 我叫阿水:博主好,刚好你在仿美团,我想问你下哈,就是美团外卖app里面那个导航栏返回按钮,在滑动的时候呢,颜色会从白到红,这是怎么实现的??oc中是有什么api提供颜色过渡变化的吗
  • 中神通:建议上传一份源码到code4app上,github上下载了好几次都没有成功。
    土鳖不土:@中神通 下个版本会优化下的。个人不喜欢在code4app上开源
  • 选一个昵称也被使用了:githup地址在哪
    土鳖不土:@选一个昵称也被使用了 https://github.com/tubie/JFMeiTuan
  • 坞约贝:这是ios的?有木有安卓源码
    土鳖不土:@坞约贝 没有
  • jetson:4篇都看了完了..写在lz分享,你github的工程编译后提示没有SAKChannelCommon.bundle怎么破
    土鳖不土:@iOS吴启晗 建议把里面的图片资源下的JFTgImage的.bundel文件删除就可以了。下个版本将继续优化,和适配iOS9
    wuqh1993:@jetson 我也是这个问题。。
    土鳖不土:@jetson 建议把里面的图片资源下的JFTgImage的.bundel文件删除就可以了
  • 三千雨点:谢谢做出这样好作品让我们学习
    土鳖不土:@nextrain 不客气哈,继续加油哦
  • 改变自己_now:学习大神
  • ONEWJ:多谢分享,学习
    土鳖不土:@筱嫄 加油 :blush:
  • SeanKChan:目前正在学习中,谢谢楼主分享
    土鳖不土:@CapricornChan 不客气,加油哦。
  • Cpan_mac_i:学习了,感谢分享
    土鳖不土:@Cpan_mac_i 不客气哈,加油。
  • AbelSu:很不错,最近在做一个swift2.0模仿美团的,你的博客能给我帮助,谢谢
    土鳖不土:@AbelSu 不客气哈,加油。

本文标题:高仿美团<四>

本文链接:https://www.haomeiwen.com/subject/yuhncttx.html