5

[iOS]代码推荐:大图缩放视图 - Vertigo

 2 years ago
source link: https://www.isaced.com/post-224.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

[iOS]代码推荐:大图缩放视图 - Vertigo

今天有个需求,需要在UIWebView上点击图片,然后放大,类似于很多新闻客户端的文章阅读页的效果,开始想自己写,虽然不难,但由于程序员懒惰的天赋,悄悄点开Code4APP,翻来翻去,找到一份还算理想的开源代码:Vertigo

Vertigo

可以看到戳到妹纸的时候会有一个放大一点弹跳的效果,这是用到了iOS7新的ViewController切换API,之前在破船的文章中也有提到过,在这里:[WWDC 2013 Session笔记 - iOS7中的ViewController切换],这里就不多介绍了。

问题来了,既然是新的API,那目前我的工程肯定还要兼容iOS6,于是看看代码,还是很好解决的,不过要牺牲一点效果:

#pragma mark - Private methods

- (IBAction)showImage {
    TGRImageViewController *viewController = [[TGRImageViewController alloc] initWithImage:[self.imageButton imageForState:UIControlStateNormal]];
    
    //禁止掉...
    //viewController.transitioningDelegate = self;

    [self presentViewController:viewController animated:YES completion:nil];
}

以上代码来自Github仓库中的Sample Project,我们吧中间的那一行transitioningDelegate给注释掉便可在iOS6运行了,其他功能不变,甚至不用改里面的代码,就是切换的动画没有了,会变成从下面一块黑色的ViewController平移上来,也就是普通的present动画,当然我们也可以稍微改加一行代码换换感觉:

viewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

这是 ViewController的modalTransitionStyle 属性,有几个系统定好的动画供选择:

typedef NS_ENUM(NSInteger, UIModalTransitionStyle) {
    UIModalTransitionStyleCoverVertical = 0,
    UIModalTransitionStyleFlipHorizontal,
    UIModalTransitionStyleCrossDissolve,
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_3_2
    UIModalTransitionStylePartialCurl,
#endif
};

当然,既然能这样修改动画,那自己写动画也是可以的。

那么看到这个效果很适合我的场景,不过却是用在WebView中的点击图片,于是翻翻找找,得到下面一个解决方案:

-(void)addTapOnWebView
{
    UITapGestureRecognizer* singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
    [self.webView addGestureRecognizer:singleTap];
    singleTap.delegate = self;
    singleTap.cancelsTouchesInView = NO;
}

#pragma mark- TapGestureRecognizer

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}

-(void)handleSingleTap:(UITapGestureRecognizer *)sender
{
    CGPoint pt = [sender locationInView:self.webView];
    NSString *imgURL = [NSString stringWithFormat:@"document.elementFromPoint(%f, %f).src", pt.x, pt.y];
    NSString *urlToSave = [self.webView stringByEvaluatingJavaScriptFromString:imgURL];
    if (urlToSave.length > 0) {
        [self showImageURL:urlToSave point:pt];
    }
}

//呈现图片
-(void)showImageURL:(NSString *)url point:(CGPoint)point
{
    //弹出大图视图
}

首先添加个手势在Webview上,然后根据点下的坐标用Js获取到图片的url,也就是图片 img 的 src 属性,然后传给 Vertigo 就完事儿。

项目地址:https://github.com/gonzalezreal/Vertigo


Recommend

  • 31
    • 掘金 juejin.im 6 years ago
    • Cache

    仿头条、微信大图预览视图

    图片大图预览 在我现在的项目当中,也存在大图预览的功能,但其实现过于繁重,采用一个Activity实现,并且在图片展示的过程中会产生卡顿感,整体感觉很是不好,正巧项目也在重构过程中,所以决定将这一功能写成一个成型的控件。话不多说,先上图看下效果。 整体实

  • 36

    中国铁总日前宣布,年底前将有10条新的铁路线路投入运营,其中包括5条高铁线路、3条都在东北地区:北京至哈尔滨高铁(京哈高铁)承德至沈阳段、新民至通辽高铁(新通高铁)、哈尔滨至牡丹江高铁(哈牡高铁)、济南至青岛高铁(济青高铁)、杭昌高铁杭州至黄山...

  • 58

    Andorid加载大图,双击放大,手势缩放 Android开发中,有时候会有加载巨图的需求,如何加载一个大图而不产生OOM呢,使用系统提供的BitmapRegionDecoder这个类可以很轻松的完成。 效果图:

  • 6

    jQuery-鼠标经过显示大图并跟随鼠标效果插件 这篇文章发布于 2009年10月17日,星期六,20:00,归类于 jQuery相关。 阅读 95743 次, 今...

  • 9

    昨日下了直播,橡皮擦在浏览网页,忽然发现一张手机壁纸不错,既然来都来了,不试一把也不合适。 Python 爬虫 120 例,已完成文章清单 千张壁纸秒爬取 数据源分析 爬取目标

  • 6
    • segmentfault.com 2 years ago
    • Cache

    一张思维大图入门React

    俗话说的好“好记性不如烂笔头”,今天秉承着后期复习方便的态度,整理了一份React基础知识点,并以思维导图的方式呈现出来,方便跟老铁们一起查漏补缺。“React”完整思维导图也有呀!!!一、项目初始化二、UI层面

  • 5

    本文是star-history项目源码阅读的第二篇文章,会包含: 搜索栏+大图的HTML与CSS排版 本次对代码的分析基于Commit -

  • 8

    苹果计划开卖“Today大图”广告位!谷歌禁止“全屏关不掉”广告 2022-08-03 •

  • 5

    [大图]F1 Class of 2022 车队毕业照 Posted 2022-11-20 | stdin 2022赛季结束了,几乎每场都看完。搜集一下各个车队的集体照,也算是纪念一下。

  • 4

    pixian批量AI抠图工具,可下载大图! 5月 16, 2023 发表于: 设计工具.

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK