美文网首页
WYW项目总结

WYW项目总结

作者: Hiker5 | 来源:发表于2018-11-26 17:07 被阅读12次

最近刚完成了公司的一个项目,现在进入了改bug阶段,稍微闲了下来,对项目进行一些知识点的总结吧。都是些琐碎的点,因为自己之前没用到,现在记录下来,方便以后查阅。

1.label的宽高自适应
{
NSString *tempString = [NSString stringWithFormat:@"这是测试的string>>%@", self.viewModel.tempString];
CGSize size = [self sizeWithText:tempString font:[UIFont systemFontOfSize:18] maxSize:CGSizeMake(MAXFLOAT, MAXFLOAT)];
self.timesLabel.text = tempString;
self.timesLabel.frame.size.width = size.width + 20;
self.timesLabel.frame.size.height = size.height + 10;
}
2.图片动画CABasicAnimation的使用

这个主要是参考另外一位同学的总结“CABasicAnimation使用总结
”。
需要注意的点是:

  • 给视图添加动画时,移动的不是视图本身,而是添加在视图上的 presentation layer的一个缓存,最后需要移除;
  • 添加组合动画,给动画设置key-value加以区分;
  • CAAnimation的delegate是strong类型,容易产生循环引用,可以声明一个单独的类去实delegate的回调。
  • 一些常用的animationWithKeyPath值的总结
说明 使用形式
transform.scale 比例转化 @(0.8)
transform.scale.x 宽的比例 @(0.8)
transform.scale.y 高的比例 @(0.8)
transform.rotation 围绕中心点旋转 @(M_PI)
transform.rotation.x 围绕x轴旋转 @(M_PI)
transform.rotation.y 围绕y轴旋转 @(M_PI)
transform.rotation.z 围绕z轴旋转 @(M_PI)
cornerRadius 圆角的设置 @(50)
backgroundColor 背景颜色的变化 (id)[UIColor purpleColor].CGColor
bounds 大小,中心不变 [NSValue valueWithCGRect:CGRectMake(0, 0, 200, 200)];
position 位置(中心点的改变) [NSValue valueWithCGPoint:CGPointMake(300, 300)];
contents 内容,比如UIImageView的图片 imageAnima.toValue = (id)[UIImage imageNamed:@"to"].CGImage;
opacity 透明度 @(0.7)
contentsRect.size.width 横向拉伸缩放 @(0.4)最好是0~1之间的
3.iOS的cookie管理

该项目的登录信息后台是放在cookie中返回的,后面需要登录才能访问的接口也是后台根据登录返回的cookie信息去判断,在iOS中,应用退出,会话结束的时候,Cookies是默认被丢弃的,而浏览器默认是保存的。这就导致了每次退出APP再进来,访问需要登录信息的接口是,会提示没有权限,请重新登录。解放方法:
1.对最近一次登录的账号密码做持久化保存,每次打开APP做一次自动登录的操作。在此不做细表。
2.对登录返回的cookie进行修改,更改cookie的过期时间,每次登录再去更新cookie信息。

/**
 *  更改cookie保存时间(登录后调用该方法)
 */
- (void)saveLoginCookie
{
    NSArray<NSHTTPCookie *> *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];
//    NSMutableArray<NSDictionary *> *propertiesList = [[NSMutableArray alloc] init];
    [cookies enumerateObjectsUsingBlock:^(NSHTTPCookie * _Nonnull cookie, NSUInteger idx, BOOL * _Nonnull stop) {
        NSMutableDictionary *properties = [[cookie properties] mutableCopy];
        //将cookie过期时间设置为一年后
        NSDate *expiresDate = [NSDate dateWithTimeIntervalSinceNow:3600*24*30*12];
        properties[NSHTTPCookieExpires] = expiresDate;
        //下面一行是关键,删除Cookies的discard字段,应用退出,会话结束的时候继续保留Cookies
        [properties removeObjectForKey:NSHTTPCookieDiscard];
        //重新设置改动后的Cookies
        [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:[NSHTTPCookie cookieWithProperties:properties]];
    }];
}

但我总觉得这个设计有点问题,我上面的方法是把cookie的过期时间设置为了1年,意思是我登录了APP后,即便我每天都打开使用,一年后,它突然说我退出登录的,要我重新登录,虽然一年登录一次,并不会感觉到什么,但,还是有点不合理吧0.0。

4.转盘抽奖

先上效果图吧。


UI图 效果图
图中的奖品图片,文字描述都做了一定角度的旋转,这个其实没啥,附一个传送门:view的环形分布。主要是找了一个image的工具类,很全很实用,这里跟大家分享一下。照旧,传送门:UIImage工具 效果图.gif
5.图片的局部拉伸

项目首页底部有个填充图片,当用户拉倒底部了,图片出现,继续往上拉,图片的局部就会被拉伸,类似于橡皮人路飞的手被不断拉长,效果如下。实现方法,主要是图片的局部拉伸


图片拉伸.gif
UIImage *originImage = [UIImage imageNamed:@"bottomImage"]; //203 * 64
UIImage *newImage = [originImage 
//UIEdgeInsetsMake(上, 左, 下, 右), resizingMode:平铺还是拉伸
resizableImageWithCapInsets:UIEdgeInsetsMake(55, 0, 0, 0) resizingMode:UIImageResizingModeStretch];
self.bottomImageView.image = newImage;

capInsets定义图片的不拉伸范围(这个范围是相对于源图片大小而言),resizingMode定义了图片以拉伸/平铺的方式变换。在设置了四周的不拉伸范围后,中间的蓝色部分将会以 拉伸/平铺的方式 被拉伸,是拉伸范围

分析图.jpg
6.关于图片的两个方法
//获取gif中的图片
-(NSArray *)getImagesFromGIF:(NSString *)gifName {
    NSURL *gifImageUrl = [[NSBundle mainBundle]URLForResource:gifName withExtension:@"gif"];
    //获取Gif图的原数据
    CGImageSourceRef gifSource = CGImageSourceCreateWithURL((CFURLRef)gifImageUrl, NULL);
    //获取Gif图有多少帧
    size_t count = CGImageSourceGetCount(gifSource);
    NSMutableArray *images = [[NSMutableArray alloc] init];
    for (NSInteger i = 0; i < count; i++) {
        //生成一张CGImageRef类型的图片
        CGImageRef imageRef = CGImageSourceCreateImageAtIndex(gifSource, i, NULL);
        UIImage *image = [UIImage imageWithCGImage:imageRef];
        [images addObject:image];
        CGImageRelease(imageRef);
    }
    //得到图片数组
    return images;
}

//通过URL获得图片
- (UIImage *)getImageFromURL:(NSString *)fileURL
{
    UIImage *targetImage;
    NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileURL]];
    targetImage = [UIImage imageWithData:data];
    return targetImage;
}
7. WKWebView加载HTML

项目中经常会用到webview去展示一下信息,常见的是后台返回一个URL,然后前端只需要

[self.wkWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"后台返回的URL"]]];

但有时候后台又会直接返回一个HTML文本,其实加载方式也是一样

[self.wkWebView loadHTMLString:@"后台返回的HTML文本" baseURL:nil];

但是有时候后台对文本格式没有加以限制就会出现以下这些情况


最初效果.jpeg

文字很小,图片问题不大,但也没达到最理想的效果,我们需要加以修改

  • 方法一:当然这时候你可以单独修改文字大小,在webview的delegate中执行以下方法
// 页面加载完成之后调用
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation
{
    //修改字体大小
    [webView evaluateJavaScript:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '250%'" completionHandler:nil];
}
  • 方法二:在webview加载HTML的时候,在头部添加CSS样式
- (void)webviewLoadHTML
{
    NSString *headerString = @"<header><meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=0.5, user-scalable=no'></header>";
    [self.wkWebView loadHTMLString:[headerString stringByAppendingString:@"后台返回的HTML文本"] baseURL:nil];
}

运行看看效果


修改前效果.gif

字体是可以了,但图片,大图会超出屏幕宽度,导致可以左右滑动,体验不好,再次修改

- (void)webviewLoadHTML
{
    NSString *headerString = [NSString stringWithFormat:@"<header><style>img{max-width:%fpx !important;height:auto !important;}</style><meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=0.5, user-scalable=no'></header>", kScreenWidth - 20];
    [self.wkWebView loadHTMLString:[headerString stringByAppendingString:@"后台返回的HTML文本"] baseURL:nil];
}

运行,图片宽度最大是屏幕宽度减20,高度自适应。完美。


最终效果.jpeg

嗯,这次就先写到这里。后续AR再另外开一篇。

相关文章

  • WYW项目总结

    最近刚完成了公司的一个项目,现在进入了改bug阶段,稍微闲了下来,对项目进行一些知识点的总结吧。都是些琐碎的点,因...

  • Swift 项目编译优化(一)

    级别:★☆☆☆☆标签:「编译过程」「Swift 项目优化编译时间」作者: WYW审校: QiShare团队 前言前...

  • iOS 查看及导出项目运行日志

    级别:★☆☆☆☆标签:「iOS 查看及导出项目运行日志」「iOS 查看日志」「iOS 查看崩溃日志」作者: WYW...

  • 初识CABasicAnimation

    级别:★☆☆☆☆标签:「CABasicAnimation」「基础动画」「阴影」「旋转」「scale」作者: WYW...

  • iOS Password AutoFill

    级别:★☆☆☆☆标签:「iOS」「Password AutoFill」作者: WYW审校: QiShare团队 前...

  • iOS 避免常见崩溃(二)

    级别: ★★☆☆☆标签:「iOS 」「避免常见崩溃」「FBKVOController」「KVO」作者: WYW审...

  • Dart基础(二)

    级别: ★☆☆☆☆标签:「Flutter 」「Dart」「Dart Functions」作者: WYW审校: Q...

  • iOS 获取设备当前语言和地区

    级别:★☆☆☆☆标签:「AppleLanguages」「zh-Hans-CN」作者: WYW审校: QiShare...

  • iOS CABasicAnimation相关的duration及

    级别:★☆☆☆☆标签:「CAAnimationGroup」「duration」「串行动画」作者: WYW审校: Q...

  • Sign In With Apple(一)

    级别: ★☆☆☆☆标签:「iOS 13」「双重因子验证」「Sign In With Apple」作者: WYW审...

网友评论

      本文标题:WYW项目总结

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