首页

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变动。

设计师必须掌握的交互知识

ui设计分享达人


交互设计 Interaction Design 也被成为IXD。交互设计建立起了人与计算机便捷沟通的通道,它的目标是创造可用性和用户体验俱佳的产品。作为UI设计师,我们在工作之中经常会对接交互设计师和产品经理,他们具有丰富的交互知识和经验。那是不是我们作为UI设计师,就只需要专心做好视觉层面的工作而不需要了解交互设计了呢?当然不是,在视觉设计层面更多地考虑布局和交互原则才可以让我们的界面更友好,视觉设计师是交互设计中非常重要的角色。

 


UI设计如何选择界面布局样式?

博博

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

一起学设计 2018-03-15 17:32:59

什么是界面布局样式?

界面布局样式是指用于区分信息内容,层次的板式设计的具体方式。

总结和了解目前常用的界面布局样式,可以让设计师快速决策,选择合适的设计方式。

界面布局样式有哪些?

UI设计如何选择界面布局样式?

一.卡

利用「卡」设计界面,对应的是现在流行的「卡片式设计」,比如:APP Store 的 Today 页面。

大海将从以下 3 点描述卡片设计的优势:

  • 灵活性

  • 信息区分

  • 操作性和趣味性

灵活性

示例如下,分别是 Instagram,知乎,微博的首页。

UI设计如何选择界面布局样式?

Instagram 的「推荐用户」模块,知乎的「知乎书店」模块,微博的「问答」模块,都利用了可以横向滑动的卡片设计,打破了订阅流信息垂直展示的限制,从而展示更多的信息。

信息区分—信息类型

示例如下,分别是天猫,严选,微信读书的个人中心截图。

UI设计如何选择界面布局样式?

这三个「个人中心」的设计,都利用卡片设计,对不同类型的信息进行了区分和归整。

  • 天猫:第一张卡片式用户个人信息,以及用户自己收藏的内容和足迹数据;第二张卡片都是订单数据;第三张卡片是运营卡片,用于专门的大型活动的内容展示;

  • 考拉:第一张卡片是用户个人信息,以及用户自己收藏的内容和足迹数据;第二张卡片都是订单数据;第三张卡片是用户相关的其他信息;第四张卡片是卡拉提供的服务。

  • 微信读书:第一张卡片是用户个人信息;第二张卡片是用户账户的基本数据;第三张卡片是用户自己生成的相关内容;

信息区分—时间

示例如下,分别是 APP Store,微信公众号,微博的截图。

UI设计如何选择界面布局样式?

这三个设计,都把复杂的内容信息,用卡片设计的形式,按照时间维度进行了整理和排序。

操作性和趣味性

示例如下,分别是支付宝,ZUO,探探的截图。

UI设计如何选择界面布局样式?

  • 卡片是一种模拟物理世界的设计形式,拥有可操作隐喻,可以被覆盖、堆叠、移动、划去。

  • 支付宝卡包:模仿物理世界真实的银行卡设计,利用用户已有的银行卡查看习惯,让用户快速理解和查看已绑定的银行卡

  • ZUO:「ZUO」是一款小众的,有趣新鲜创意的内容分享产品。主打追寻更美好的可能,产品设计别具特色。左滑卡片可以切换内容的设计,让产品体验更加灵动有趣。

  • 探探:一款陌生人社交软件,广告主打:左滑不喜欢,右滑喜欢的体验,凸显自己在同类型软件中的体验差异化,用户的感受更加新鲜有趣。

卡片设计的反例

自从 iOS 11 之后,卡片设计的趋势就被推向了高潮。设计网站上有很多卡片式设计作品出现。

卡片设计经常会呈现出比较好的视觉效果,但是卡片设计用的不好,会导致浪费空间,降低效率。

示例如下:是大海从 dribbble 上找来的设计,通讯录的设计利用了卡片设计。

当用户需要寻找联系人时,呈「Z字型」阅读曲线,远没有微信通讯录的「直线型」阅读效率高。

UI设计如何选择界面布局样式?

二.线

「线」指的是 APP 设计中最常见的「分割线」,在分割线当中可以分为两类:

UI设计如何选择界面布局样式?

贯穿式

「贯穿式」是指,线长度贯穿屏幕,左右边距为零。贯穿式分割线可以让被分割的信息的独立性变强。

示例如下:分别是豆瓣的首页,网易云音乐的动态截图。

UI设计如何选择界面布局样式?

两者的共同点是,每一块信息的内容较多,关联性弱。需要用贯穿式分割性,让每一个信息内容,更加独立。

内嵌式

「内嵌式」是指,线的左右边距留有空隙。内嵌式分割线,可以有助于信息阅读的流畅性。

示例如下:分别是 APP Store 今日主题的列表页,36Kr 的个人中心页面。

UI设计如何选择界面布局样式?

贯穿式和内嵌式经常是同时使用的,如下图:网易严选的填写订单页面

UI设计如何选择界面布局样式?

图中列表「商品合计」「运费」是相对关联性较强的,因此这两者之间用了内嵌式分割线。「我要开发票」和它们之间是相对独立的,因此使用贯穿式分割线。

分割线设计的反例

分割线设计是界面当中最常用的元素,大海看了这么多APP,截了这么多图,都没有发现界面中一根线都没有使用的产品。

分割线设计要注意是否应该使用,以及使用时线的颜色,粗细。

下图中:知乎的「个人中心」,来源于网络的日历设计。

UI设计如何选择界面布局样式?

知乎:线的颜色用的过重,导致当看到这个页面时,会感受到满眼都是线。改进方法有两种:把线改细,改淡;把列表文字改重。总结下来就是拉开文字和线的对比。

日历:日期本身的排版已经把信息区分的比较明显,此时不需要使用分割线。假设 「亲密」 「对比」 「重复」 足以让信息得到区分,不使用分割线,可以让你的设计,更加透气简洁。

三.间距

利用「间距」设计界面,对应的是现在流行的「无框设计」,不用分割线,纯粹用间距实现信息的排版。

大海将从以下 2 点描述其适用性:

  • 图片为主

  • 内容少且有规律

图片为主

示例如下:分别是 Instagram,爱彼迎,红板报的界面截图。这些页面中,均以图片为主。图片本身的边缘具备分隔作用。

UI设计如何选择界面布局样式?

内容少且有规律

示例 1:爱彼迎的「故事页面」和「搜索结果页」,两者都只有 2 中信息板式。内容少且有规律。

UI设计如何选择界面布局样式?

示例 2:轻芒的「分类页」和「类别首页」,分类页只有一种板式,并横向排版展示。类别首页只有一屏信息。

UI设计如何选择界面布局样式?

总结:卡,线,间距都是页面当中基础元素,希望本篇文章可以帮助设计师掌握和了解这 3 个基础元素的适用性。在设计执行中,更加风驰电掣,如沐春风。


UI设计师如何有效的跨团队、多角色沟通?

博博

UI设计师如何有效的跨团队、多角色沟通?

一起学设计 2018-03-19 17:55:35

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

作为设计方接口人,我近期参与了某产品新版本的交互设计及开发跟进工作。该项目的产品规划、设计、开发、运营由京深两地四方多个团队合作进行。结合自身项目经历,现将我对跨团队多角色沟通的感悟与经验加以总结,希望对大家有所帮助。有效沟通是提升工作效率的基础,尤其是鹅厂这种业务涉及多地、对外多有合作的大型公司,进行跨团队的、多角色转换的沟通是工作常态。跨团队合作项目通常需要我们在团队内部、异地leader、内外部合作伙伴、第三方外包等多种角色间灵活调整沟通方式,运用有效的沟通手段,以确保沟通效果。

背景

有效沟通是提升工作效率的基础,尤其是鹅厂这种业务涉及多地、对外多有合作的大型公司,进行跨团队的、多角色转换的沟通是工作常态。跨团队合作项目通常需要我们在团队内部、异地leader、内外部合作伙伴、第三方外包等多种角色间灵活调整沟通方式,运用有效的沟通手段,以确保沟通效果。

索引

UI设计师如何有效的跨团队、多角色沟通?

本文将从有效沟通的心理建设、角色分析、流程搭建+工具沉淀三个层次展开。

心理建设

有效沟通的两点认识

为“传”而“达”

沟通是信息的有效传达。“传”是手段,要求沟通时需阐明观点;“达”是目的,指明沟通旨在使人通达理解。沟通中出现的自说自话、固执己见,通常是偏执于“传”,而忽视了“达”。需要明确的是,所有的沟通,都应该以接收方更好的理解接受为目的,而不是自顾自的滔滔不绝。

减少损耗

信息传达的过程伴随着信息的损耗。因此,在沟通的各个环节都需注意减少损耗,提升触达率。一方面,要理清自己的表达重点和思路,减少信息的输出损耗;另一方面,要从接受方关注点出发,提升对接受者的信息触达;此外,还要灵活切换沟通方式、正确处理意见分歧等,尽量减少信息在传递途中的折损。

UI设计师如何有效的跨团队、多角色沟通?

跨团队多角色沟通的基本态度

跨团队——秉持中立合作的态度

  • 中立——团队不同,诉求不同,秉持中立的沟通态度,不要因个人偏向导致无意义消耗。

  • 合作——以同理心赢得各方的信任,避免抵触情绪的产生,营造良好的沟通氛围。

  • 产品目标导向——对有争议的问题点,应综合权衡用户体验、产品目标和开发成本,以产品目标为第一要义。

多角色——认清各方关注点的差异

  • 理解各方差异化的核心诉求——对不同团队角色的沟通中应有不同的侧重点,灵活的转换角色,做有针对性的输出表达。

  • 对内交流——以产品目标为导向,保证内部一致;对上汇报——重点明确,避免流水帐;对外沟通——目标明确,内部一致,有针对性的沟通,避免互相拆台或鸡同鸭讲。

角色分析

项目组成员角色模型

项目伊始,在融入团队的过程中,应注意理清项目组内的不同角色,明确汇报对象,做好任务分工,理清利益关系,协调各方诉求。

(具体项目组角色模型可能涉密,略)

各角色核心诉求及沟通侧重点模型

不同角色的核心诉求不同,也因此在对不同角色沟通时也应该有所侧重,以本项目为例:京深两地四方的所有成员,可大致划分为如下七种角色。

UI设计师如何有效的跨团队、多角色沟通?

UI设计师如何有效的跨团队、多角色沟通?

各角色核心诉求及沟通侧重点小结

团队角色 核心诉求 沟通侧重点
leader 把控项目进度、确保项目实现 进度同步、资源申请、问题确认
设计负责人 推进项目进行,落实产品功能 进度同步、问题评审、资源协调
视觉 确保视觉呈现 视觉反馈、问题评审
技术支持 提供技术支持和监督 寻求技术支持、评估开发成本
产品经理 推动项目进行、维护运营侧利益 功能确认、开发协调、运营活动落实
前端 降低前端成本、减少反复 跟进前端进度、帮助协调资源
后端 规避后端风险、降低开发成本 前端实现确认、开发问题跟进与协调

流程搭建

有效沟通流程模型

在有效沟通流程模型中,我按筹备、执行、跟进三个阶段,绘制出体验地图,将沟通中的关键节点按行为、心理、情绪、方法、工具五个纬度拆分,梳理各节点需注意的问题,以及相应的有效沟通方法和工具。(详情请点击查看大图)

UI设计师如何有效的跨团队、多角色沟通?

UI设计师如何有效的跨团队、多角色沟通?

筹备阶段——明确目的,同步信息

  • 明确沟通目的。无论是同步邮件、电话会议还是IM群聊,都需要在发起前明确目的,列好问题清单,带着目的沟通。如:多方电话会议前,应事先知会各方会议主旨,准备会议提纲并在会议开始时向各方阐明,为会议提供清晰的行进框架。

  • 提前同步信息。信息同步是沟通的前提。依据沟通目的准备沟通所需的文档,根据需要提前同步,尽量减少因信息不对称带来的时间浪费。明确易读的设计输出、正式沟通前与各方单独的预沟通、提前邮件同步告知等,都是有效信息同步的手段。

执行阶段——抓大放小、促成共识

  • 对待争议,抓大放小,避免僵局。评估争议点时,先不要基于反驳避免情绪化表达,适当发问:为什么做?为什么不做?不做之后有什么后果?理智全面的做出评判。给问题点评定优先级,抓大放小,集中精力推进主功能,高成本、低优先级的细节问题放到最后统一处理,避免陷入“就是要改”vs“就是不改”的无谓消耗。根据需要及时协调第三方资源进场,寻求技术支持或资深leader的建议,避免沟通僵局的出现。

  • 促成共识。无结果的沟通是无效的沟通,有效沟通应促使各方达成共识。无论是待协调、暂搁置还是需改进,都需要有一个结论明确、责任人明确、截止时间明确的沟通结论,并依此执行跟进。

跟进阶段——同步落实,自我反思

  • 进度同步,问题落实。沟通过后及时同步沟通结论,设计交付、前端交付等阶段性时间节点,需以正式的项目邮件,及时周知项目相关人员。对于已解决的问题,及时跟进验收;暂时搁置的问题,做好记录,明确时间节点和责任人;需更多资源介入的问题,及时对上反馈,申请资源解决。

  • 自我反思与补齐。每次沟通都是一次查漏补缺的过程,每次沟通后花时间反思一下本次沟通中自己在设计说明中有哪些疏忽、表述上有何不足、相关知识上有那些欠缺,以此为鉴及时调整、补齐疏漏。

工具沉淀

开发故事卡

说明:明确易读的设计说明文档

功能:产品设计说明、开发指导手册、阶段性交付走查依据

使用场景:跨团队沟通中,便于开发人员准确的理解设计意图;适合外部合作时模块化开发与阶段性交付,便于交付及走查。

使用要点:

  • 根据信息构架拆分产品模块,分别设立索引,提供产品概览,串联各功能详情页。

  • 在索引和详情页之间由超链接跳转,方便快速定位。

  • 按照功能点拆分详情页,提出功能需求,明确验收标准,说明页面细节。

  • 各页面统一编号与视觉源文件一一对应,方便快速查找。

UI设计师如何有效的跨团队、多角色沟通?

需求管理文档

说明:需求及反馈问题的规范化管理模板

功能:需求变动及问题反馈的管理模板、开发发跟进的沟通文档

使用场景:开发跟进阶段,实时记录变动的需求及反馈的问题点;设计侧定期反馈给开发人员的规范化输出文档。

使用要点:

  • 明确问题及目标效果,排定优先级依此解决。

  • 明确负责人和时间节点,保证落实。

  • 做好文档更新维护及信息同步。

  • 按阶段统一反馈调整,节约开发时间。

UI设计师如何有效的跨团队、多角色沟通?

关注点推进模型

说明:不同项目阶段明确核心关注点的虚拟模型

功能:辅助聚焦当下关注点,避免陷入不合时宜的细节或宏观问题

使用场景:从宏观到微观的产品设计过程中,帮助梳理各个阶段需沟通的核心问题,沟通时陷入细节或反复争论时的自查工具。

使用要点:

  • 做好关注点的的逐步推进:探讨信息构架时就不要在交互样式上反复拉锯;讨论交互方式时就不要过度关注视觉细节。

  • 不过早陷入细节。优秀产品的细节固然需打磨,但从0到1实现一款产品的过程中,将有限的资源和排期消耗在不合时宜的细节权衡上,得不偿失。

  • 同样,若因执行时的设计挑战需调整产品上层,也需主题限定问题范围,不要因宏观问题上的反复而影响执行效率。

UI设计师如何有效的跨团队、多角色沟通?

优先级评估模型

说明:不同项目阶段评估需求优先级的KANO衍生模型

功能:借助KANO模型分析思路,对需求优先级提供排定依据

使用场景:设计阶段样式取舍、开发跟进阶段需求调整的先后顺序、应对分歧如何抓大放小,都可以借助优先级评估模型辅助评估。

使用要点:

  • 不同项目阶段,不同沟通对象对同一需求优先级的评定标准不同,因此应注意根据项目阶段和沟通对象灵活调整。

  • 不同产品在用户体验与产品目标取舍上有所区别。一般而言,2C产品更注重用户体验,而2B产品则可能更注重实现产品目标,因此应注意具体产品具体分析。

UI设计师如何有效的跨团队、多角色沟通?

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


产品经理分析产品积分体系

博博

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


积分的作用在整个产品的过程中主要是希望是围绕着拉新、留存、促活去做的,配合着主打新功能等等根据产品的差异而差异化。从用户为出发点,将积分可以分为两大块:一块是获取、一块是消耗。

从用户角度出发,了解关于产品积分体系的事

首先,就积分而言,是用户通过完成某些任务或手段来进行对应积分点的获取,再通过相关的手段进行消耗的一个过程。

从用户角度出发,了解关于产品积分体系的事

所以从用户为出发点,将积分可以分为两大块:一块是获取;一块是消耗。

下面针对两点分开来说:

一、获取(主要是获取的方式和对应的规则)

获取方式,大类可根据用户完成对应任务类型分为:

1. 新手任务类(这是一个帮助用户熟悉产品同时激励用户使用产品的过程)

  • 绑定手机;
  • 绑定邮箱;
  • 上传头像;
  • 首次消费/发文/分享等等对应产品核心功能的首次使用;
  • 完善个人信息。

根据产品核心功能和侧重点的不同而不同,一定要区别哪些信息内容是我们想从用户处获取的核心,哪一些并不是很重要。不要人云亦云,不要有“别的产品有了所以我也要有”的思想,思考一下为什么你要需要这个任务。可以多参照其他积分体系完善的对它们进行整理归类,之后结合自身产品特性再去做自己的。

2. 日常任务类

  • 签到(这几乎是最基础最常见的);
  • 对应产品核心功能的使用相关的任务。

3. 运营活动类

  • 节日相关类;
  • 产品特定日期相关类(周年等等)。

这个具体需要配合运营相关人员的推广活动等等进行部署调整,但是一定要做好部门间的对接工作。因为活动对应分配的积分比例等等影响很深远,一定要思考好本次活动预计需要分发出去多少积分,达到怎样的活动效果?对积分整体有什么影响?存在那些可能出现的问题和漏洞?怎么去防止薅羊毛党?等等。

4. 特定激励用户类

这类主要是,例如:生日,或者和用户建立联系的特定日期(例如:几周年等等)。

5. 均衡刺激积分的流通

这类主要放在消耗中讲,主要是抽奖类把积分当作一类奖品进行兑换。

以上算是大致讲了积分的获取,要领就是结合产品结合情景去进行设置。对于初次设计的人来说,就是先要找到经典体系完整的有相关性参考价值的产品的积分体系,进行总结整理思考,然后再进行自己的设计,而且尽量多看多整理几家。

二、消耗

消耗的话根据产品的自身属性的不同,表现形式差异性比较大所以我的列举不一定人人都适用,仅供参考。但是本质都是一样的,都是进行积分的消耗。

1. 兑换商品

  • 虚拟商品;
  • 现实商品。

兑换的手段可以是纯积分兑换,可以是积分+现实货币。对于兑换商品的选择也是很重要,如果兑换给出的商品都让用户提不起来兴趣,那么无疑是失败的。好比二次元类搞活动积分兑洗洁精就跑的很偏了,所以选品也很重要。

虚拟产品的兑换最好是围绕着核心功能or下一步主打的功能来比较好,再或者说积分体系和会员体系是相辅相成的,可以在兑换商品,这里加入兑换会员增强之间的联系。会员体系是另外一大块了在这里就不说了。

2. 抽奖

抽奖是最好的进行积分流动的手段,如果用户只是一味的累积积分,无论是产品所提供的虚拟商品,还是现实商品都不和他心意提供另一个出口给用户。或者前两者门槛过高或需要现实货币,用户不愿花费,抽奖都是一种低花费积分小概率抽中商品,利于积分生态的流动的措施。

具体的抽奖形式就很多了什么刮刮奖啊大转盘啊,记得要控制好概率分配噢。

三、注意点

(1)对于整个积分体系上面都是细节,在实际操作中第一步,要确定的是在公司的战略上,愿意每年投入多少钱在里面,或者对于已经盈利的公司,是拿出盈利里的多少百分比来进行用户的一个回馈。

同时,在投入时,希望得到的反馈效果是怎样的,都要制定好。这个可以根据数据后期的变化再进行调整,但是一定要有这样一个概念。去估计整体的量,在这个预算下进行后期的设计,同时在后期设计完成后,在进行计算在极端情况下(两个极端)和预期情况下,和公司整体战略偏差是否在可接受范围,如果不在那么再进行调整。

(2)积分体系可以看作是产品内部的货币体系,所以要注意积分膨胀和积分紧缩的问题,要是积分的价值尽量保持在一个波动不大可控的范围内。无论是膨胀还是紧缩,都会影响产品和用户给产品带来不好的影响。请重点关注膨胀,因为多数会出现的情况时设计不当积分超发

(3)做好相关数据的管理实时反馈,用户的领取积分数据,消耗积分数据等等,细节数据需要自己去扣清楚都是有价值的数据。后台相关页面设计到位,及时将数据反馈给相关人员进行沟通。

(4)做好风控体系,别让羊毛党毁了整个体系。

(5)不要让你的积分体系一成不变,在固定的体系下,要用不同的活动内容和兑换商品的推成出新,让用户感觉到新鲜感。如果什么都不变化不抓着节奏走,那么用户会失去兴趣。具体要和运营等等相关人员进行讨论。

(6)积分的规则一定要完善没有漏洞,不论是给出的任务还是消耗的过程一定不要有歧义,一定要仔细!!!!!!这点很重要!!!!

(7)积分体系的任务应该是对用户的留存,活跃和新增起到帮助作用的。所以不可能兼顾到所有的注册用户,一定要分清楚主次,谁是主要服务对象,服务的目的是什么等等。

好久没有写过文章了,逻辑有不顺畅,内容有错误的地方欢迎大家指出,互相学习,谢谢阅读。

本文由 @judyyyy 原创发布于人人都是产品经理。未经许可,禁止转载

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


日历

链接

个人资料

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

存档