首页

优秀UI界面设计评析

蓝蓝设计的小编

男生运动鞋商店支付界面,颜色搭配非常舒服,鞋子摄影也很漂亮,字体字号运用非常到位。

React Native原生与JS层交互

seo达人

如果您想订阅本博客内容,每天自动发到您的邮箱中, 请点这里

最近在对《React Native移动开发实战》一书进行部分修订和升级。在React Native开发中,免不了会涉及到原生代码与JS层的消息传递等问题,那么React Native究竟是如何实现与原生的互相操作的呢?

原生给React Native传参

原生给React Native传值

原生给JS传值,主要依靠属性,也就是通过initialProperties,这个RCTRootView的初始化函数的参数来完成。通过RCTRootView的初始化函数你可以将任意属性传递给React Native应用,参数initialProperties必须是NSDictionary的一个实例。RCTRootView有一个appProperties属性,修改这个属性,JS端会调用相应的渲染方法。

使用RCTRootView将React Natvie视图封装到原生组件中。RCTRootView是一个UIView容器,承载着React Native应用。同时它也提供了一个联通原生端和被托管端的接口。

例如有下面一段OC代码:

NSURL *jsCodeLocation;

  jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil]; NSArray *imageList = @[@"http://foo.com/bar1.png",
                         @"http://foo.com/bar2.png"]; NSDictionary *wjyprops = @{@"images" : imageList};

  RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
                                                      moduleName:@"ReactNativeProject" initialProperties:wjyprops
                                                   launchOptions:launchOptions];
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

下面是JS层的处理:

import React, { Component } from 'react'; import {
  AppRegistry,
  View,
  Image,
} from 'react-native'; class ImageBrowserApp extends Component { renderImage(imgURI) { return (
      <Image source={{uri: imgURI}} />
    );
  }
  render() { return (
      <View>
        {this.props.images.map(this.renderImage)}
      </View>
    );
  }
}

AppRegistry.registerComponent('ImageBrowserApp', () => ImageBrowserApp);
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

不管OC中关于initialProperties的名字叫什么,在JS中都是this.props开头,然后接下来才是key名字。

{"rootTag":1,"initialProps":{"images":["http://foo.com/bar1.png","http://foo.com/bar2.png"]}}. 
    
  • 1

使用appProperties进行参数传递

RCTRootView同样提供了一个可读写的属性appProperties。在appProperties设置之后,React Native应用将会根据新的属性重新渲染。当然,只有在新属性和旧的属性有更改时更新才会被触发。

NSArray *imageList = @[@"http://foo.com/bar3.png", @"http://foo.com/bar4.png"]; rootView.appProperties = @{@"images" : imageList};
    
  • 1
  • 2
  • 3

可以随时更新属性,但是更新必须在主线程中进行,读取则可以在任何线程中进行。

React Native执行原生方法及回调

React Native执行原生方法

.h的文件代码:

#import <Foundation/Foundation.h> #import <RCTBridgeModule.h> @interface wjyTestManager : NSObject<RCTBridgeModule> @end
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

.m的文件代码:

#import "wjyTestManager.h" @implementation wjyTestManager RCT_EXPORT_MODULE();

RCT_EXPORT_METHOD(doSomething:(NSString *)aString withA:(NSString *)a)
{ NSLog(@"%@,%@",aString,a);
} @end
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

为了实现RCTBridgeModule协议,你的类需要包含RCT_EXPORT_MODULE()宏。这个宏也可以添加一个参数用来指定在Javascript中访问这个模块的名字。如果你不指定,默认就会使用这个Objective-C类的名字。

并且必须明确的声明要给Javascript导出的方法,否则React Native不会导出任何方法。OC中声明要给Javascript导出的方法,通过RCT_EXPORT_METHOD()宏来实现。

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View,
  Alert,
  TouchableHighlight,
} from 'react-native';

import {
  NativeModules,
  NativeAppEventEmitter
} from 'react-native'; var CalendarManager = NativeModules.wjyTestManager; class ReactNativeProject extends Component { render() { return (
          <TouchableHighlight onPress={()=>CalendarManager.doSomething('sdfsdf','sdfsdfs')}>
          <Text style={styles.text}
      >点击 </Text>
          </TouchableHighlight>

        );
      }
} const styles = StyleSheet.create({
text: {
  flex: 1,
  marginTop: 55,
  fontWeight: 'bold' },
});

AppRegistry.registerComponent('ReactNativeProject', () => ReactNativeProject);
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

要用到NativeModules则要引入相应的命名空间import { NativeModules } from ‘react-native’;然后再进行调用CalendarManager.doSomething(‘sdfsdf’,’sdfsdfs’);桥接到Javascript的方法返回值类型必须是void。React Native的桥接操作是异步的,所以要返回结果给Javascript,你必须通过回调或者触发事件来进行。

传参并回调

RCT_EXPORT_METHOD(testCallbackEvent:(NSDictionary *)dictionary callback:(RCTResponseSenderBlock)callback)
{ NSLog(@"当前名字为:%@",dictionary); NSArray *events=@[@"callback ", @"test ", @" array"];
  callback(@[[NSNull null],events]);
}
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

说明:第一个参数代表从JavaScript传过来的数据,第二个参数是回调方法; 
JS层代码:

import {
  NativeModules,
  NativeAppEventEmitter
} from 'react-native'; var CalendarManager = NativeModules.wjyTestManager; class ReactNativeProject extends Component { render() { return (
          <TouchableHighlight onPress={()=>{CalendarManager.testCallbackEvent(
             {'name':'good','description':'http://www.lcode.org'},
             (error,events)=>{ if(error){
                   console.error(error);
                 }else{
                   this.setState({events:events});
                 }
           })}}
         >
          <Text style={styles.text}
      >点击 </Text>
          </TouchableHighlight>

        );
      }
}
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

参数类型说明

RCT_EXPORT_METHOD 支持所有标准JSON类型,包括:

  • string (NSString)
  • number (NSInteger, float, double, CGFloat, NSNumber)
  • boolean (BOOL, NSNumber)
  • array (NSArray) 包含本列表中任意类型
  • object (NSDictionary) 包含string类型的键和本列表中任意类型的值
  • function (RCTResponseSenderBlock)

除此以外,任何RCTConvert类支持的的类型也都可以使用(参见RCTConvert了解更多信息)。RCTConvert还提供了一系列辅助函数,用来接收一个JSON值并转换到原生Objective-C类型或类。例如:

#import "RCTConvert.h" #import "RCTBridge.h" #import "RCTEventDispatcher.h" //  对外提供调用方法,为了演示事件传入属性字段 RCT_EXPORT_METHOD(testDictionaryEvent:(NSString *)name details:(NSDictionary *) dictionary)
{ NSString *location = [RCTConvert NSString:dictionary[@"thing"]]; NSDate *time = [RCTConvert NSDate:dictionary[@"time"]]; NSString *description=[RCTConvert NSString:dictionary[@"description"]]; NSString *info = [NSString stringWithFormat:@"Test: %@\nFor: %@\nTestTime: %@\nDescription: %@",name,location,time,description]; NSLog(@"%@", info);
}
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

iOS原生访问React Native

如果需要从iOS原生方法发送数据到JavaScript中,那么使用eventDispatcher。例如:

#import "RCTBridge.h" #import "RCTEventDispatcher.h" @implementation CalendarManager @synthesize bridge = _bridge; //  进行设置发送事件通知给JavaScript端 - (void)calendarEventReminderReceived:(NSNotification *)notification
{ NSString *name = [notification userInfo][@"name"];
    [self.bridge.eventDispatcher sendAppEventWithName:@"EventReminder" body:@{@"name": name}];
} @end
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

在JavaScript中可以这样订阅事件,通常需要在componentWillUnmount函数中取消事件的订阅。

import { NativeAppEventEmitter } from 'react-native';

var subscription = NativeAppEventEmitter.addListener( 'EventReminder',
  (reminder) => console.log(reminder.name)
); ... // 千万不要忘记忘记取消订阅, 通常在componentWillUnmount函数中实现。
subscription.remove();
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

用NativeAppEventEmitter.addListener中注册一个通知,之后再OC中通过bridge.eventDispatcher sendAppEventWithName发送一个通知,这样就形成了调用关系。

蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服务

ofo《我们看过的世界杯》H5

资深UI设计者

如果您想订阅本博客内容,每天自动发到您的邮箱中, 请点这里

项目背景:为了配合世界杯做的H5活动,主题是DIY你的世界杯时刻                                      

玩法:选择自己看世界杯的场景,可以在画面当中添加食物和自定义的小元素,另外根据场景的变换人物的腿也可以选择哦                                                 

项目周期大概半个月,和团队的小伙伴一起完成的,感谢@珊,@暖暖,@明明   

使用工具包括sketch、ps、手绘板                                                                    

 

ps:做H5真的是很累,工作量大,画的手疼,不过也积累了很多的经验,上线了好开心!

请登录并验证邮箱后查看原图请登录并验证邮箱后查看原图请登录并验证邮箱后查看原图请登录并验证邮箱后查看原图请登录并验证邮箱后查看原图请登录并验证邮箱后查看原图请登录并验证邮箱后查看原图请登录并验证邮箱后查看原图请登录并验证邮箱后查看原图

蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计  cs界面设计  ipad界面设计  包装设计  图标定制  用户体验 、交互设计、 网站建设 平面设计服务



前端工程师必备实用网站

周周

素材类网站


千库网,一个免费下载图片素材的网站:http://588ku.com/ 
千库网.jpg.png


Unsplash是一个分享免费高质量照片的网站,照片分辨率都挺大,而且都是真实的摄影师作品,图片多是风景和静物:https://unsplash.com/ 

Unsplash.jpg.pngUnsplash2.jpg.png

插件类网站

jq22分享jQuery插件和提供各种jQuery的详细使用方法,在线预览,jQuery插件下载及教程http://www.jq22.com/

jq22.jpg.png


http://www.htmleaf.com/ 这个网站与上一个网站类似,也提供了大量的jQuery插件

                htmleaf.jpg.png

layui这是一个强大的模块化前端框架http://www.layui.com/

             layui1.jpg.png

layui2.jpg.png

H-ui,端框架,一个轻量级前端框架,简单免费,兼容性好,服务中国网站:http://www.h-ui.net/index.shtml

H-ui.jpg.png 

字体类网站

有字库,一个免下载字体,直接在线引用字体的网站http://www.youziku.com/onlinefont/index

有字库.jpg.png



PS字体库,包含了几乎所有类型的字体,下载好安装,PS中就可以使用了:http://www.psjia.com/pssc/fontxz/list_18_3.html


               PS字体库.png

图标类网站

iconfont,这是阿里巴巴旗下的图标库网站,直接搜索关键词就可以找到大批的图标。下载图标的时候我们还可以选择颜色、大小、格式,根据自己的需要下载就好了:http://www.iconfont.cn/plus

                   iconfont.jpg.png

easyicon这也是一个非常有名的图标库,与上面那个不同的是,这里的图标不是单一颜色的,而是设计好的颜色。下载图标也很简单,直接点击对应图标上面的格式就可以下载:http://www.easyicon.net/iconsearch/ios/

                  easyicon.jpg.png

奥森图标(Font Awesome),提供丰富的矢量字体图标—通过CSS可以任意控制所有图标的大小 ,颜色,阴影:http://www.thinkcmf.com/font/search.html

                奥森图标.jpg.png

                 奥森图标1.jpg.png

配色类网站

http://colorhunt.co这个网站给我们提供了很多的配色方案,我们直接使用就OK了。

使用方法也很简单,鼠标移动到对应的颜色上,我们就可以看到颜色的十六进制码,复制这个颜色到工具里就可以使用了。

                colorhunt.jpg.png

https://webgradients.com/180种渐变方案供你选择,还可以直接复制CSS样式应用到网页中。

              webgradients.jpg.png

adobe这个是Adobe公司出的,他提供了多种配色方案。我们点击圆盘中间的点,就可以调整出我们想要的配色方案:https://color.adobe.com/zh/create/color-wheel

                Adobe.jpg.png

http://www.colorhunter.com/这是一个提取现有图片配色方案的工具。我们上传一张图片,它就会帮我们把图片的配色提取出来供我们使用。

                colorhunt.jpg.png

bootcss这个网站是为WEB设计,开发中经常用到的安全色。网站内列出了颜色的十六进制码和RGB码,复制粘贴就可以了:http://www.bootcss.com/p/websafecolors/

               bootcss..jpg.png

sioe这是一个在线RGB和十六进制颜色码转换工具。在对应的位置填入十六进制代码,点击转换,我们就可以获取到RGB颜色的代码了http://www.sioe.cn/yingyong/yanse-rgb-16/

              sioe.jpg.png




2018年UI设计趋势概览

博博

2018年UI设计趋势概览

嗨兔科技 2018-06-11 10:41:59

如果您想订阅本博客内容,每天自动发到您的邮箱中, 请点这里


互联网产品的用户界面设计趋势是根据用户的不同需求而不断变化的。在仔细分析了过去几年用户界面设计的趋势和创新之后,我们可以发现其背后的一些规律,2018年UI界面设计的趋势如下。

2018年UI设计趋势概览

渐变色

在过去的几年里,越来越多的设计师在设计作品时采用了色彩渐变的方法,今年的流体渐变更是风靡全球。即使你只选择了一种颜色,也可以在色彩渐变和不同图片的帮助下,营造出出丰富的层次结构感,绘制出一幅令人赏心悦目的画面。因此,色彩渐变的流行之风不仅在席卷了2017年整年,还将会在2018年继续流行下去。

2018年UI设计趋势概览

icon由线转面、刻画细节

现在的ios12中,采用了面性图标,未选中和选中状态只有颜色上的区分,并且图标更加圆润。目前很多用户界面已经给页面底部标签栏的icon加上微动效底部标签栏icon不仅有微动效,十分有意思,符合当下95后00后的用户心态。同时细节的设计带给用户的感受也会上一个档次。

2018年UI设计趋势概览

透明度+重叠

字体、图形以及颜色的重叠,不仅可以使界面看上去更加醒目鲜明,还可以营造出一种空间感。 相同元素的重叠,再辅以阴影,也会使整个APP界面的设计产生更多的奇妙感,牢牢抓住用户眼球,给他们留下深刻印象。因此,用户体验设计中,不同元素的重叠将会成为2018年的趋势。

2018年UI设计趋势概览

卡片+投影相结合

ios12中采用了大圆角卡片设计,它不再像过去MD中的小圆角那样呆板,大圆角让设计更加轻快大气。相信大家已经看到了很多卡片都使用了投影这一手法,轻微的、似有似无的投影,不会被用户立即察觉,但是会给设计增加深度,形成层叠的关系,更加醒目,可以更好的抓住用户的注意力。

2018年UI设计趋势概览

插画风格

插画风格运用的越来越广泛,适用于app当中的启动页、缺省页、banner图、专题头图、弹窗插画、icon等等,UI界面有各式各样的插画风格——如手绘风格、简约风格、MBE风格、剪纸风格和孟菲斯风格等。这些插画风格的使用不仅使APP更加有趣和与众不同,同时也赋予了用户界面个性,这就在界面设计层出不穷的当下能够给用户留下更为深刻的印象。

2018年UI设计趋势概览

较强的颜色或字体大小对比

强烈的颜色或字体对比也可以帮助设计师设计出优秀的用户界面来吸引用户的注意。例如,添加不同样式、类型、大小的字体,也可以传递层次和空间的感觉。而不同类型和风格的配色也会形成鲜明的对比,使整个设计更加丰富多彩和引人注目。

2018年UI设计趋势概览

3D效果正流行

今年C4D大热,相信大家已经感受到了,今年双十一很多商家都使用了3D效果,有的还加上了动效,可以让你全方位、多角度、更加真实的观察商品。目前还不会C4D的设计师们,为了提升你的竞争力,有必要学起来了,毕竟技多不压身。

2018年UI设计趋势概览

交互动效

给APP的图标、字体、照片和按钮添加动画或交互总是对用户有着积极的影响,因为它能带用户更多愉快的体验。它的几点特性:快速且流畅、恰到好处的反馈、提升操作感受、提供良好的视觉效果。所以这一趋势在2018年还将继续流行下去。

2018年UI设计趋势概览

动态视频

一般小视频使用在启动页多用于第一次打开app的场景,对用户的代入感较强再如由动态图片转变成动态视频,图片中有少量的动态元素,仿佛赋予图片生命,比较唯美和贴近现实。手机banner设计上也会采用动态视频进行展现,方便360度的查看商品,刺激你剁手的欲望。

2018年UI设计趋势概览

VR/AR/VUI是未来的大趋势

众所周知,现在VR(虚拟现实)和AR(增强现实)VUI(语音交互设计)大火,它们的核心都是计算机视觉和听觉。VR目前在娱乐领域被使用,而AR将会真正影响我们的工作和生活,多用于多媒体、市场营销、教育等方面。VUI在医疗和户外活动方面会发挥出前所未有的用户超级体验。

2018年UI设计趋势概览

我们为创造者和变革者而生,我们帮助企业制定用户体验策略,为用户创造精彩的数字体验,并通过品牌设计与用户建立情感的连接,用设计驱动商业策略的成功。

2018年UI设计趋势概览


蓝蓝设计www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 平面设计服务




Win10最具雄心的UI实验,微软砍掉了

蓝蓝设计的小编

IT之家6月28日消息 今天微软推送了的Windows 10 RS5快速预览版17704系统,在该版本中,微软删除了Sets窗口管理功能,这是一种全新的任务型分组的Windows UI多窗口。被誉为Windows 95以来最大窗口UI变动。

日历

链接

个人资料

蓝蓝设计的小编 http://www.lanlanwork.com

存档