【问题标题】:Stunning GUI: How is it technically done令人惊叹的 GUI:它是如何在技术上完成的
【发布时间】:2014-02-26 14:07:12
【问题描述】:

这个问题与另一个已经发布的关于图形用户设计的问题有些相关。 (Learning to create beautiful /next-generation GUI)

到目前为止,我已经阅读了很多有关 UI 设计的信息。虽然距离经验还很遥远,但我现在知道一些需要注意的警告。但我关心的不是设计指南。

我更想知道这在技术上是如何完成的。就像 SO question 中的 ShaChris23 一样,我厌倦了编写“普通的老式”GTK/Windows GUI。

让我们举一些具体的例子:

我的问题不是关于这些非常具体的例子。但是,假设您已经在 Photoshop 中设计了您的 GUI。现在?从现在开始,您将如何在技术上实现它?您是否为正在使用的工具包编写自定义组件?您是否为没有通用工具包的不同平台重新发明轮子? (Apple iOS 与 Android)。

不是在谈论网络技术,而是在谈论真正的应用程序。

顺便说一句:我听说过 WPF 和其他东西。如果需要,我正在为 Java、C++ 和一些 C# 开发。但我正在寻找一种跨平台的方式。

感谢任何提示

【问题讨论】:

  • 有趣,你想让我推荐一个 UI 框架吗?或者你在问我“如何创建 UI 框架”?请告诉我你到底想要什么。
  • 使用node.jsnpm install phaser 并将其设置为眩晕。

标签: user-interface cross-platform


【解决方案1】:

我有点惊讶这个问题没有因为过于宽泛而被关闭,因为很难辨别你真正要问的是什么。但是,如果您需要一个能够让您实现令人惊叹的 UI 设计的跨平台框架,请查看kivy

【讨论】:

    【解决方案2】:

    让我们讨论第一项,时间线控件。

    这将是一系列自定义视图,一个用于标注(一个三角形和一个带有文本的矩形按钮),一个时间线(单行和点数组),以及一个可以接受列表的环绕视图在时间线上绘制的名称。

    每个视图都负责绘制自己。视图可以使用 psd 中的拼接图像,或者实际绘制自身。就尝试开发跨平台代码而言,这是可以做到的,但这通常意味着您必须在每个平台上接受许多妥协。

    作为替代方案,您可以在界面中使用 html5 视图,并使用本机代码来连接业务逻辑。

    这是一个使用 javascript 画布创建标注的粗略示例。 http://jsfiddle.net/5ZMn9/7/

    function Callout() {
        this.x = 0;
        this.y = 0;
        this.width = 0;
        this.height = 0;
        this.position = 1;
        this.name = "";
    }
    Callout.prototype = {
        draw: function(canvas) {
           var callout = this;
           canvas.drawPolygon({
              fillStyle: 'blue',
              x: callout.x, y: callout.y-12+callout.position*25,
              radius: 5,
              sides: 3,
              rotate: (callout.position)*180
            });
            canvas.drawRect({
              fillStyle: 'blue',
              x: callout.x, y: callout.y,
              width: 50,
              height: 20
            });
            canvas.drawText({
              fillStyle: '#fff',
              x: callout.x, y: callout.y+2,
              fontSize: 8,
              fontFamily: 'Verdana, sans-serif',
              text: callout.name            
            });
        }
    };
    
    function Timeline() {
        this.x = 0;
        this.y = 0;
        this.length = 0;
        this.stops = 0;
    }
    Timeline.prototype = {
        draw: function(canvas) {
            var timeline = this;
            canvas.drawLine({
              strokeStyle: '#960',
              strokeWidth: 2,
              x1: timeline.x, y1: timeline.y,
              x2: timeline.x+timeline.length, y2: timeline.y
            });
            for ( var i=0; i < this.stops; i++) {
                canvas.drawEllipse({
                  fillStyle: '#c90',
                  x: timeline.x+30+50*i, y: timeline.y,
                  width: 8, height: 8
                });
            }
        }
    };
    
    function Wrapper() {
        this.names = [];
        this.height = 300;
        this.width = 600;
    }
    Wrapper.prototype = {
        draw: function(canvas) {
            $(canvas).clearCanvas();
            var timeline = new Timeline();
            timeline.x = 0;
            timeline.y = 45;
            timeline.length = this.names.length*50+10;
            timeline.stops = this.names.length;
            timeline.draw(canvas);
            for ( var i = 0; i<this.names.length; i++) {
               var callout = new Callout();
               callout.x = i*50+30;
               callout.y = i%2*50+20;
               callout.position = 1-i%2;
               callout.name = this.names[i];
               callout.width=90;
               callout.draw(canvas);
            }
        }
    };
    
    var wrapper = new Wrapper();
    wrapper.names = ["One","Two","Three","Four","Five"];
    wrapper.draw($('canvas'));
    

    【讨论】:

      【解决方案3】:

      如果您正在为没有通用工具包的多个平台进行开发,您可能应该为每个平台开发不同的 UI。

      对于 iOS/Android,每个平台都有不同的风格指南。此外,他们的原生 API 专门设计用于支持使用这些指南开发的应用程序 - 如果您尝试从头开始构建新的 GUI(例如,使用您自己的基于 OpenGL 的小部件工具包),它看起来多么“酷”并不重要.即使您认为它直观且易于使用,但对于习惯于主机平台约定的用户来说,它可能会违反直觉,因为他们还没有时间熟悉您的自定义 UI。

      在您给出的 iPhone 示例中,是的,按钮将手动布局。有点。他们可能依赖 Cocoa 的 AutoLayout 系统,而不是静态定位每个元素。

      话虽如此,可能没有必要每次都“发明轮子”。社区已经开发了大量的 UI 组件(至少在 iOS 上)——例如,看一下CocoaPods(具体来说,我之前使用过iCarousel 来获得类似封面流效果)。

      【讨论】:

        猜你喜欢
        • 2021-05-19
        • 1970-01-01
        • 1970-01-01
        • 2011-04-05
        • 2011-08-04
        • 1970-01-01
        • 2013-09-26
        • 2011-07-19
        • 1970-01-01
        相关资源
        最近更新 更多