app ios 发布 界面截图_ios url跳转app界面 - CSDN
  • 在市面上,我们所使用的大部分工具应用类型的app都是有一定的界面结构的(类似淘宝,QQ, 微信),其中最主要的界面结构归纳起来就是使用 “导航栏(navigationBar) + 主视图(mainView)+工具栏(tabBar)”来实现,如图...

    移动APP现在发展的如火如荼,各大应用商店都涌现了一大批优秀的app产品,但是作为一名app的消费者,以及app开发工程师,我觉得今天有必要在这里和大家一起来探讨一下如何实现一个简单的app开发过程,或者说一个app的结构该大致怎么实现。


    在市面上,我们所使用的大部分工具应用类型的app都是有一定的界面结构的(类似淘宝,QQ, 微信),其中最主要的界面结构归纳起来就是使用 “导航栏(navigationBar) + 主视图(mainView)+工具栏(tabBar)”来实现,如图所示:


               


    今天,就来讲一下,如何实现一个简单的应用型app最主要的界面UI框架。在这里我把这个框架拆分为几个部分,这样既有利于大家的理解也体现低耦合的特性(因为本身这几个自定义控件都是独立的,交互都通过接口来实现)。


    如上图所示,这个界面包含了NavigationBar ,  UIViewController,  以及tabBarController;导航栏navigationbar顾名思义,当然是为了满足用户跳转与返回的操作;UIViewController的作用即是用于呈现给用户所需要看的内容;tabBarController的作用是用于管理多个控制器,轻松的完成视图之间的切换。


    我们来简单的了解一下它的view层级图:


    第一层是我自定义的一个导航栏CustomNavigationController继承自UINavigationController;我们通常把它作为整个程序的rootViewController,在AppDelegate中的applicationDidFinishLaunching函数中设置为根视图。


    第二层视图CustomTabBarController(继承自UIViewController)是在CustomNavigationController初始化时,通过初始化API函数initWithRootViewController附加在导航栏上的,其作用是添加tabBar控件以及其他的UiviewController用于显示。


    第三层视图CustomTabBar,继承自UIView; 是我们自定义的UITabBar控件,上面显示的每一个tabItem都对应着一个viewController;tabItem是自定义的按钮继承自UIButton,在下面的讲解中,我会主要介绍这些控件该如何实现。

    创建自定义的CustomTabBarController

    1.设置CustomTabBar控件的frame大小以及显示内容页面的frame大小

    CustomTabBarController中声明了两个变量,一个是CustomTabBar对象(自定义的UITabBar),另一个是UIView对象,在界面进入viewWillAppear的时候初始化这个

    两个控件,代码如下:

    - (void)setTabBarHidden:(BOOL)hidden animated:(BOOL)animated{
        _tabBarHidden = hidden;
        
        __weak CustomTabBarController *weakSelf = self;
        
        void (^block)() = ^{
            CGSize viewSize = weakSelf.view.frame.size;
            CGFloat tabBarStartingY = viewSize.height;
            CGFloat contentViewHeight = viewSize.height;
            CGFloat tabBarHeight = CGRectGetHeight([[weakSelf tabBar] frame]);
            
            if (!tabBarHeight) {
                tabBarHeight = 55;
            }
            
            if (![weakSelf parentViewController]) {
                if (UIInterfaceOrientationIsLandscape([weakSelf interfaceOrientation])) {
                    viewSize = CGSizeMake(viewSize.height, viewSize.width);
                }
            }
            
            if (!hidden) {
                tabBarStartingY = viewSize.height - tabBarHeight;
    //            if (![[weakSelf tabBar] isTranslucent]) {
                    contentViewHeight -= ([[weakSelf tabBar] minimumContentHeight] ?: tabBarHeight);
    //            }
                [[weakSelf tabBar] setHidden:NO];
            }
            
            [[weakSelf tabBar] setFrame:CGRectMake(0, tabBarStartingY, viewSize.width, tabBarHeight)];
            [[weakSelf contentView] setFrame:CGRectMake(0, 0, viewSize.width, contentViewHeight)];
        };
        
        void (^completion)(BOOL) = ^(BOOL finished){
            if (hidden) {
                [[weakSelf tabBar] setHidden:YES];
            }
        };
        
        if (animated) {
            [UIView animateWithDuration:0.24 animations:block completion:completion];
        } else {
            block();
            completion(YES);
        }
    }

    2.设置每个tabBarItem对应的UIViewController

    在XCode工程中我新建了四个UIViewController对象,分别是FirstViewController, SecondViewController, ThirdViewController, 以及FourthViewController。这四个视图对象想分别与四个tabBarItem对应,我们调用函数setShowViewController来实现,代码如下:

    - (void)setShowViewControllers:(NSMutableArray *)mviewControllers{
        self.viewControllers = mviewControllers;
        if (mviewControllers && [mviewControllers isKindOfClass:[NSArray class]]) {
            self.viewControllers = mviewControllers;
            
            NSMutableArray *tabBarItems = [[NSMutableArray alloc] init];
    
            for (UIViewController *viewController in mviewControllers) {
                CustomTabBarItem *tabBarItem = [[CustomTabBarItem alloc] init];
                
                [tabBarItem setTitle:viewController.title forState:UIControlStateNormal];
                [tabBarItems addObject:tabBarItem];
            }
    
            [self.tabBar setTabBarItems:tabBarItems];
        } else {
    //        for (UIViewController *viewController in _viewControllers) {
    //            [viewController Custom_setTabBarController:nil];
    //        }
            self.viewControllers = nil;
        }
    }


    3.设置当前要显示的页面

    承接上面的功能,既然我们的tabBarItem每一个都对应一个UIViewController,那如何实现让每一次的点击按钮过后,我们的界面就能跳转显示为正确的呢,设置的代码如下:

    //设置当前显示的页面
    - (void)setContentViewIndex:(NSInteger)index{
        self.selectedIndex = index;
        
        if(index >= self.viewControllers.count){
            return;
        }
        
        if([self selectedViewController]){
            [[self selectedViewController] willMoveToParentViewController:nil];
            [[[self selectedViewController] view] removeFromSuperview];
            [[self selectedViewController] removeFromParentViewController];
        }
        
        [[self tabBar] setSelectedItem:[[self tabBar] items][self.selectedIndex]];
        
        [self setSelectedViewController:[[self viewControllers] objectAtIndex:self.selectedIndex]];
        [self addChildViewController:[self selectedViewController]];
        [[[self selectedViewController] view] setFrame:[[self contentView] bounds]];
        [[self contentView] addSubview:[[self selectedViewController] view]];
        [[self selectedViewController] didMoveToParentViewController:self];
    }

    创建自定义的CustomTabBar

    TabBar在app中可谓是个非常重要的常客,为什么说他重要呢,因为它相当于是打开一个app里面所有功能的钥匙;tabBar中的每一个tabBarItem都对应

    一个viewController, 通过触发按钮事件我们可以切换不同的页面。

    1.设置tabBarItems

    tabBar可不能没有tabBarItem, 通过头文件中提供的接口setTabBarItems,可以将app所需要的tabBarItem对象设置好,代码如下:

    - (void)setTabBarItems:(NSArray *)m_array{
    
        for (CustomTabBarItem *item in m_array) {
            [item removeFromSuperview];
        }
        
        self.items = m_array;
        for (CustomTabBarItem *item in m_array) {
            NSLog(@"%@", item);
            
            [item addTarget:self action:@selector(tabBarItemWasSelected:) forControlEvents:UIControlEventTouchDown];
            [self addSubview:item];
        }
    }

    2.设置界面切换代理 

    我们将显示当前所需界面的函数写在了CustomTabBarController这个类中,而我们的点击事件则是在CustomTabBar中,那如何才能调用到设置当前页面的函数呢!

    我们这边就采用了代理delegate的模式,代码如下:

    @protocol CustomTabBarDelegate <NSObject>
    
    - (BOOL)tabBar:(CustomTabBar *)tabBar shouldSelectItemAtIndex:(NSInteger)index;
    - (void)tabBar:(CustomTabBar *)tabBar didSelectItemAtIndex:(NSInteger)index;
    
    @end

    3.设置tabBarItem点击事件

    因为我们的tabBarItem是继承自UIButton,所以这边用addtarget的方式为每一个item都添加了事件响应机制。代码如下:

    - (void)tabBarItemWasSelected:(id)sender {
        if ([[self delegate] respondsToSelector:@selector(tabBar:shouldSelectItemAtIndex:)]) {
            NSInteger index = [self.items indexOfObject:sender];
            if (![[self delegate] tabBar:self shouldSelectItemAtIndex:index]) {
                return;
            }
        }
        
        [self setSelectedItem:sender];
        
        if ([[self delegate] respondsToSelector:@selector(tabBar:didSelectItemAtIndex:)]) {
            NSInteger index = [self.items indexOfObject:self.selectedItem];
            [[self delegate] tabBar:self didSelectItemAtIndex:index];
        }
    }

    创建自定义CustomTabBarItem

    关于自定义的按钮,我在之前的博客中有写过一篇如何绘制一个精美的自定义的按钮大家感兴趣的话可以去看下;我先把这次功能的代码贴出来,可以先看一下:

    #import <UIKit/UIKit.h>
    
    @interface CustomTabBarItem : UIButton
    @property CGFloat itemHeight;
    
    #pragma mark - Title configuration
    
    
    @property (nonatomic, copy) NSString *title;
    @property (nonatomic) UIOffset titlePositionAdjustment;
    @property (copy) NSDictionary *unselectedTitleAttributes;
    @property (copy) NSDictionary *selectedTitleAttributes;
    
    #pragma mark - Image configuration
    
    
    @property (nonatomic) UIOffset imagePositionAdjustment;
    
    - (UIImage *)finishedSelectedImage;
    - (UIImage *)finishedUnselectedImage;
    - (void)setFinishedSelectedImage:(UIImage *)selectedImage withFinishedUnselectedImage:(UIImage *)unselectedImage;
    
    #pragma mark - Background configuration
    
    - (UIImage *)backgroundSelectedImage;
    
    - (UIImage *)backgroundUnselectedImage;
    
    - (void)setBackgroundSelectedImage:(UIImage *)selectedImage withUnselectedImage:(UIImage *)unselectedImage;
    
    #pragma mark - Badge configuration
    
    @property (nonatomic, copy) NSString *badgeValue;
    @property (strong) UIImage *badgeBackgroundImage;
    @property (strong) UIColor *badgeBackgroundColor;
    @property (strong) UIColor *badgeTextColor;
    @property (nonatomic) UIOffset badgePositionAdjustment;
    @property (nonatomic) UIFont *badgeTextFont;
    @end

    #import "CustomTabBarItem.h"
    @interface CustomTabBarItem () {
        NSString *_title;
        UIOffset _imagePositionAdjustment;
        NSDictionary *_unselectedTitleAttributes;
        NSDictionary *_selectedTitleAttributes;
    }
    
    @property UIImage *unselectedBackgroundImage;
    @property UIImage *selectedBackgroundImage;
    @property UIImage *unselectedImage;
    @property UIImage *selectedImage;
    
    @end
    
    @implementation CustomTabBarItem
    - (id)initWithFrame:(CGRect)frame {
        self = [super initWithFrame:frame];
        if (self) {
            [self commonInitialization];
        }
        return self;
    }
    
    - (id)init {
        return [self initWithFrame:CGRectZero];
    }
    
    - (void)commonInitialization {
        // Setup defaults
        
        [self setBackgroundColor:[UIColor clearColor]];
        
        _title = @"";
        _titlePositionAdjustment = UIOffsetZero;
        
        if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) {
            _unselectedTitleAttributes = @{
                                           NSFontAttributeName: [UIFont systemFontOfSize:10],
                                           NSForegroundColorAttributeName:[UIColor colorWithRed:255/255.f green:255/255.f blue:255/255.f alpha:1.0f],
                                           };
        } else {
    #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0
            _unselectedTitleAttributes = @{
                                           UITextAttributeFont: [UIFont systemFontOfSize:10],
                                           UITextAttributeTextColor: [UIColor colorWithRed:255/255.f green:255/255.f blue:255/255.f alpha:1.0f],
                                           };
    #endif
        }
        
        _selectedTitleAttributes = [_unselectedTitleAttributes copy];
        _badgeBackgroundColor = [UIColor redColor];
        _badgeTextColor = [UIColor whiteColor];
        _badgeTextFont = [UIFont systemFontOfSize:12];
        _badgePositionAdjustment = UIOffsetZero;
    }
    
    - (void)drawRect:(CGRect)rect {
        CGSize frameSize = self.frame.size;
        CGSize imageSize = CGSizeZero;
        CGSize titleSize = CGSizeZero;
        NSDictionary *titleAttributes = nil;
        UIImage *backgroundImage = nil;
        UIImage *image = nil;
        CGFloat imageStartingY = 0.0f;
        
        if ([self isSelected]) {
            image = [self selectedImage];
            backgroundImage = [self selectedBackgroundImage];
            titleAttributes = [self selectedTitleAttributes];
            
            if (!titleAttributes) {
                titleAttributes = [self unselectedTitleAttributes];
            }
        } else {
            image = [self unselectedImage];
            backgroundImage = [self unselectedBackgroundImage];
            titleAttributes = [self unselectedTitleAttributes];
        }
        
        imageSize = [image size];
        
        CGContextRef context = UIGraphicsGetCurrentContext();
        CGContextSaveGState(context);
        
        [backgroundImage drawInRect:self.bounds];
        
        // Draw image and title
        
        if (![_title length]) {
            [image drawInRect:CGRectMake(roundf(frameSize.width / 2 - imageSize.width / 2) +
                                         _imagePositionAdjustment.horizontal,
                                         roundf(frameSize.height / 2 - imageSize.height / 2) +
                                         _imagePositionAdjustment.vertical,
                                         imageSize.width, imageSize.height)];
        } else {
            if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) {
                titleSize = [_title boundingRectWithSize:CGSizeMake(frameSize.width, 20)
                                                 options:NSStringDrawingUsesLineFragmentOrigin
                                              attributes:@{NSFontAttributeName: titleAttributes[NSFontAttributeName]}
                                                 context:nil].size;
                
                imageStartingY = roundf((frameSize.height - imageSize.height - titleSize.height) / 2);
                
                [image drawInRect:CGRectMake(roundf(frameSize.width / 2 - imageSize.width / 2) +
                                             _imagePositionAdjustment.horizontal,
                                             imageStartingY + _imagePositionAdjustment.vertical,
                                             imageSize.width, imageSize.height)];
                
                CGContextSetFillColorWithColor(context, [titleAttributes[NSForegroundColorAttributeName] CGColor]);
                
                [_title drawInRect:CGRectMake(roundf(frameSize.width / 2 - titleSize.width / 2) +
                                              _titlePositionAdjustment.horizontal,
                                              imageStartingY + imageSize.height + _titlePositionAdjustment.vertical,
                                              titleSize.width, titleSize.height)
                    withAttributes:titleAttributes];
            } else {
    #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0
                titleSize = [_title sizeWithFont:titleAttributes[UITextAttributeFont]
                               constrainedToSize:CGSizeMake(frameSize.width, 20)];
                UIOffset titleShadowOffset = [titleAttributes[UITextAttributeTextShadowOffset] UIOffsetValue];
                imageStartingY = roundf((frameSize.height - imageSize.height - titleSize.height) / 2);
                
                [image drawInRect:CGRectMake(roundf(frameSize.width / 2 - imageSize.width / 2) +
                                             _imagePositionAdjustment.horizontal,
                                             imageStartingY + _imagePositionAdjustment.vertical,
                                             imageSize.width, imageSize.height)];
                
                CGContextSetFillColorWithColor(context, [titleAttributes[UITextAttributeTextColor] CGColor]);
                
                UIColor *shadowColor = titleAttributes[UITextAttributeTextShadowColor];
                
                if (shadowColor) {
                    CGContextSetShadowWithColor(context, CGSizeMake(titleShadowOffset.horizontal, titleShadowOffset.vertical),
                                                1.0, [shadowColor CGColor]);
                }
                
                [_title drawInRect:CGRectMake(roundf(frameSize.width / 2 - titleSize.width / 2) +
                                              _titlePositionAdjustment.horizontal,
                                              imageStartingY + imageSize.height + _titlePositionAdjustment.vertical,
                                              titleSize.width, titleSize.height)
                          withFont:titleAttributes[UITextAttributeFont]
                     lineBreakMode:NSLineBreakByTruncatingTail];
    #endif
            }
        }
        
        // Draw badges
        
        if ([[self badgeValue] length]) {
            CGSize badgeSize = CGSizeZero;
            
            if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) {
                badgeSize = [_badgeValue boundingRectWithSize:CGSizeMake(frameSize.width, 20)
                                                      options:NSStringDrawingUsesLineFragmentOrigin
                                                   attributes:@{NSFontAttributeName: [self badgeTextFont]}
                                                      context:nil].size;
            } else {
    #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0
                badgeSize = [_badgeValue sizeWithFont:[self badgeTextFont]
                                    constrainedToSize:CGSizeMake(frameSize.width, 20)];
    #endif
            }
            
            CGFloat textOffset = 2.0f;
            
            if (badgeSize.width < badgeSize.height) {
                badgeSize = CGSizeMake(badgeSize.height, badgeSize.height);
            }
            
            CGRect badgeBackgroundFrame = CGRectMake(roundf(frameSize.width / 2 + (image.size.width / 2) * 0.9) +
                                                     [self badgePositionAdjustment].horizontal,
                                                     textOffset + [self badgePositionAdjustment].vertical,
                                                     badgeSize.width + 2 * textOffset, badgeSize.height + 2 * textOffset);
            
            if ([self badgeBackgroundColor]) {
                CGContextSetFillColorWithColor(context, [[self badgeBackgroundColor] CGColor]);
                
                CGContextFillEllipseInRect(context, badgeBackgroundFrame);
            } else if ([self badgeBackgroundImage]) {
                [[self badgeBackgroundImage] drawInRect:badgeBackgroundFrame];
            }
            
            CGContextSetFillColorWithColor(context, [[self badgeTextColor] CGColor]);
            
            if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) {
                NSMutableParagraphStyle *badgeTextStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy];
                [badgeTextStyle setLineBreakMode:NSLineBreakByWordWrapping];
                [badgeTextStyle setAlignment:NSTextAlignmentCenter];
                
                NSDictionary *badgeTextAttributes = @{
                                                      NSFontAttributeName: [self badgeTextFont],
                                                      NSForegroundColorAttributeName: [self badgeTextColor],
                                                      NSParagraphStyleAttributeName: badgeTextStyle,
                                                      };
                
                [[self badgeValue] drawInRect:CGRectMake(CGRectGetMinX(badgeBackgroundFrame) + textOffset,
                                                         CGRectGetMinY(badgeBackgroundFrame) + textOffset,
                                                         badgeSize.width, badgeSize.height)
                               withAttributes:badgeTextAttributes];
            } else {
    #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0
                [[self badgeValue] drawInRect:CGRectMake(CGRectGetMinX(badgeBackgroundFrame) + textOffset,
                                                         CGRectGetMinY(badgeBackgroundFrame) + textOffset,
                                                         badgeSize.width, badgeSize.height)
                                     withFont:[self badgeTextFont]
                                lineBreakMode:NSLineBreakByTruncatingTail
                                    alignment:NSTextAlignmentCenter];
    #endif
            }
        }
        
        CGContextRestoreGState(context);
    }
    
    #pragma mark - Image configuration
    
    - (UIImage *)finishedSelectedImage {
        return [self selectedImage];
    }
    
    - (UIImage *)finishedUnselectedImage {
        return [self unselectedImage];
    }
    
    - (void)setFinishedSelectedImage:(UIImage *)selectedImage withFinishedUnselectedImage:(UIImage *)unselectedImage {
        if (selectedImage && (selectedImage != [self selectedImage])) {
            [self setSelectedImage:selectedImage];
        }
        
        if (unselectedImage && (unselectedImage != [self unselectedImage])) {
            [self setUnselectedImage:unselectedImage];
        }
    }
    
    - (void)setBadgeValue:(NSString *)badgeValue {
        _badgeValue = badgeValue;
        
        [self setNeedsDisplay];
    }
    
    #pragma mark - Background configuration
    
    - (UIImage *)backgroundSelectedImage {
        return [self selectedBackgroundImage];
    }
    
    - (UIImage *)backgroundUnselectedImage {
        return [self unselectedBackgroundImage];
    }
    
    - (void)setBackgroundSelectedImage:(UIImage *)selectedImage withUnselectedImage:(UIImage *)unselectedImage {
        if (selectedImage && (selectedImage != [self selectedBackgroundImage])) {
            [self setSelectedBackgroundImage:selectedImage];
        }
        
        if (unselectedImage && (unselectedImage != [self unselectedBackgroundImage])) {
            [self setUnselectedBackgroundImage:unselectedImage];
        }
    }
    
    
    
    @end




    展开全文
  • iOS app界面设计规范

    2016-01-19 17:30:41
    记录一下iOS和Andoird的界面设计规范,方便进行标准的产品设计,并与设计师顺畅沟通 iOS界面尺寸 设备 分辨率 状态栏高度 导航栏高度 标签栏高度 iPhone6 plus 1242×2208 px
    
    

    原文地址:

    http://www.jianshu.com/p/67ab63723e54


    记录一下iOS和Andoird的界面设计规范,方便进行标准的产品设计,并与设计师顺畅沟通

    iOS篇


    界面尺寸

    设备 分辨率 状态栏高度 导航栏高度 标签栏高度
    iPhone6 plus 1242×2208 px 60px 132px 147px
    iPhone6 750×1334 px 40px 88px 98px
    iPhone5/5s/5c 640×1136 px 40px 88px 98px
    iPhone4/4s 640×960 px 40px 88px 98px
    iPad3/4/Air/Air2/mini2 2048×1536 px 40px 88px 98px
    iPad1/2 1024×768 px 20px 44px 49px
    iPad mini 1024×768 px 20px 44px 49px


    图标尺寸

    设备 App Store 程序应用 主屏幕 spotlight搜索 标签栏 工具栏和导航栏
    iPhone6 plus 1024*1024px 180*180px 144×144px 87×87 px 75*75px 66*66px
    iPhone6 1024*1024px 120*120px 144×144px 58*58px 75*75px 44*44px
    iPhone5/5s/5c 1024*1024px 120*120px 144×144px 58*58px 75*75px 44*44px
    iPhone4/4s 1024*1024px 120*120px 144×144px 58*58px 75*75px 44*44px
    iPad3/4/Air/Air2/mini2 1024*1024px 180*180px 144×144px 100*100px 50*50px 44*44px
    iPad1/2 1024*1024px 90*90px 72*72px 50*50px 25*25px 22*22px
    iPad mini 1024*1024px 90*90px 72*72px 50*50px 25*25px 22*22px

    字体

    iPhone 上的字体英文为: HelveticaNeue 至于中文,Mac下用的是黑体-简,Win下则为华文黑体,所有字体要用双数字号。

    百度用户体验部做过一个小调查, 对于app字体大小的调查结论如下:


    颜色值

    IOS颜色值取 RGB各颜色的值比如某个色值,给予IOS开发的色值为 R:12 G:34 B:56 给出的值就是 12,34,56(有时也要根据开发的习惯,有时也用十六进制)

    内部设计

    1、所有能点击的图片不得小于44px(Retina需要88px)
    2、单独存在的部件必须是双数尺寸
    3、两倍图以@2x作为命名后缀
    4、充分考虑每个控制按钮在4中状态下的样式,如图



    Android篇


    界面尺寸

    android的尺寸众多,建议使用分辨率为720x1280 的尺寸设计。这个尺寸 720x1280中显示完美,在 1080x1920 中看起来也比较清晰;切图后的图片文件大小也适中,应用的内存消耗也不会过高。

    状态栏高度:50 px
    导航栏高度:96 px
    标签栏高度:96 px
    Android最近出的手机都几乎去掉了实体键,把功能键移到了屏幕中,当然高度也是和标签栏一样的:96 px
    内容区域高度为:1038 px (1280-50-96-96=1038)

    图表尺寸

    屏幕大小 启动图标 操作栏图标 上下文图标 系统通知图标(白色) 最细笔画
    320×480 px 48×48 px 32×32 px 16×16 px 24×24 px 不小于2 px
    480×800px /480×854px /540×960px 72×72 px 48×48 px 24×24 px 36×36 px 不小于3 px
    720×1280 px 48×48 dp 32×32 dp 16×16 dp 24×24 dp 不小于2 dp
    1080×1920 px 144×144 px 96×96 px 48×48 px 72×72 px 不小于6 px

    ps: Android设计规范中, 使用的单位是dp, dp在安卓机上不同的密度转换后的px 是不一样的

    字体

    Android 上的字体为: Droid sans fallback ,是谷歌自己的字体,与微软雅黑很像。
    Android的字体大小调查结论是:


    颜色值

    Android颜色值取值为十六进制的值 比如一绿色的值, 给开发的值为 #5bc43e


    展开全文
  • 开发者证书(分为开发和发布两中: iOS Development,iOS Distribution),不论是真机调试,还是上传到appstore都是需要,用来证明自己开发者身份. 1.准备工作 拿到公司的付费的开发者账号,进入apple开发者中心网站...

    app上架, 梳理一下测试以及上架流程,希望能给之前没有做过上架的朋友们一些帮助

    开发者证书(分为开发和发布两中: iOS Development,iOS Distribution),不论是真机调试,还是上传到appstore都是需要,用来证明自己开发者身份.

    1.准备工作

    拿到公司的付费的开发者账号,进入apple开发者中心网站[https://developer.apple.com] 点击Account,登录账号进入以下界面进行证书以及id的一些注册

    1.png

    点击进入

    2.创建CER证书

    如下图点击➕号创建一个新的证书

    2.png

    选择要生成的证书类型(这里选择的是测试用的证书)

    3.png

    需要先在电脑上生成CSR证书请求文件

    4.png

    点开电脑上的钥匙串

    5.png

    点击左上角钥匙串访问->证书助理->从证书颁发机构请求证书

    6.png

    一般情况下,选择保存在本地桌面方便使用

    7.png

    继续刚才apple开发者中的请求CER步骤,上一步点击continue之后来到以下界面,选择刚刚生成的CSR文件

    8.png

    此时已经生成了CER文件,点击Download下载到本地

    9.png

    双击刚刚下载的CER文件,这时左上角出现钥匙串字样,即代表安装成功

    10.png
    3.创建APP ID

    如下图点击➕号创建应用的APP ID

    11.png

    点击进入之后需要填入名字以及Bundle ID,按照下图操作,完成后点击continue

    12.png
    13.png
    14.png

    继续点击continue即完成

    15.png
    4.添加测试设备

    如下图点击➕号添加测试设备

    16.png

    起名以及添加设备的UDID,查看UDID的方法图里已标注,点击continue即完成

    17.png
    5.生成PP文件

    完成以上步骤后描述文件 Provisioning Profiles, 该文件将appID,开发者证书,硬件Device绑定到一起,描述在哪台电脑开发,能够开发哪个应用程序,允许哪些真机设备测试等信息.

    18.png

    点击创建后根据测试或发布用途进行选择

    19.png

    选择刚刚创建的APP ID,点击continue

    20.png

    选择刚刚创建的CER证书,点击continue

    21.png

    选择允许进行测试的设备,点击continue

    22.png

    给pp文件起名,点击continue

    23.png

    此时文件生成,点击download下载到本地

    24.png

    双击左上角会出现Xcode图标,代表已成功安装到Xcode中,此时连接真机设备,comman+R运行,会有提示框点击"始终允许",成功运行到手机设备即为成功

    25.png

    发布的流程和测试一样,再走一遍即可,只是这个时候不需要指定测试设备,省去添加测试设备这个步骤. 另外需要在iTunes store 填写一些信息,这些都很简单,按照提示一步步走就可完成,后面有时间的话会更新

    附上发布时可能遇到的问题:

    以下问题直接Reset即可,说明本地你已生成但没有安装

    屏幕快照 2016-09-10 16.33.24.png

    如果是提示的你本地证书已过期,点击以下链接下载新的证书,在钥匙串中找到过期证书删除进行替换就可解决. [https://developer.apple.com/certificationauthority/AppleWWDRCA.cer]

    作者:轻云_ 链接:http://www.jianshu.com/p/b8d86683fe3b 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    展开全文
  • 请教大家一个问题:Cordova 开发的app,基本上用html5+js+css实现,现在需要在app中需要重新配置wifi,所以从app跳转到了系统setting界面设置wifi,但是打开setting界面设置完后怎么让它返回到app界面
  • 在xcode打开 ios–AwesomProject.xcodeproj 在Awesome(项目名字)----项目名字—images.xcassets 到右下角加号 + new image set 然后把设置好的icon.png icon@2x.png icon@3x.png加入进去 参考视频:...

    在xcode打开 ios–AwesomProject.xcodeproj
    在Awesome(项目名字)----项目名字—images.xcassets
    到右下角加号 + new image set 然后把设置好的icon.png icon@2x.png icon@3x.png加入进去

    参考视频:https://www.youtube.com/watch?v=H0CC1UsvjDQ

    然后点击LaunchScreen.xib文件------里面面板的控制,布局

    切记要把FlyDom—general----Launch Images Source改成(Use Asset Catalog)无才行 && Launch Screen File改成LaunchScreen(也就是LaunchScreen.xib)

    参考链接:https://blog.csdn.net/weixin_42262889/article/details/92800264

    展开全文
  • 记录一下iOS和Andoird的界面设计规范,方便进行标准的产品设计,并与设计师顺畅沟通 iOS界面尺寸 设备分辨率状态栏高度导航栏高度标签栏高度iPhone6 plus1242×2208 px60px132px147pxiPhone6750×1334 px40px88...

    记录一下iOS和Andoird的界面设计规范,方便进行标准的产品设计,并与设计师顺畅沟通

    iOS篇


    界面尺寸

    设备分辨率状态栏高度导航栏高度标签栏高度
    iPhone6 plus1242×2208 px60px132px147px
    iPhone6750×1334 px40px88px98px
    iPhone5/5s/5c640×1136 px40px88px98px
    iPhone4/4s640×960 px40px88px98px
    iPad3/4/Air/Air2/mini22048×1536 px40px88px98px
    iPad1/21024×768 px20px44px49px
    iPad mini1024×768 px20px44px49px
    Paste_Image.png
    Paste_Image.png

    图标尺寸

    设备App Store程序应用主屏幕spotlight搜索标签栏工具栏和导航栏
    iPhone6 plus1024*1024px180*180px144×144px87×87 px75*75px66*66px
    iPhone61024*1024px120*120px144×144px58*58px75*75px44*44px
    iPhone5/5s/5c1024*1024px120*120px144×144px58*58px75*75px44*44px
    iPhone4/4s1024*1024px120*120px144×144px58*58px75*75px44*44px
    iPad3/4/Air/Air2/mini21024*1024px180*180px144×144px100*100px50*50px44*44px
    iPad1/21024*1024px90*90px72*72px50*50px25*25px22*22px
    iPad mini1024*1024px90*90px72*72px50*50px25*25px22*22px

    字体

    iPhone 上的字体英文为: HelveticaNeue 至于中文,Mac下用的是黑体-简,Win下则为华文黑体,所有字体要用双数字号。

    百度用户体验部做过一个小调查, 对于app字体大小的调查结论如下:

    Paste_Image.png
    Paste_Image.png

    颜色值

    IOS颜色值取 RGB各颜色的值比如某个色值,给予IOS开发的色值为 R:12 G:34 B:56 给出的值就是 12,34,56(有时也要根据开发的习惯,有时也用十六进制)

    内部设计

    1、所有能点击的图片不得小于44px(Retina需要88px) 2、单独存在的部件必须是双数尺寸 3、两倍图以@2x作为命名后缀 4、充分考虑每个控制按钮在4中状态下的样式,如图

    Paste_Image.png
    Paste_Image.png

    Android篇


    界面尺寸

    android的尺寸众多,建议使用分辨率为720x1280 的尺寸设计。这个尺寸 720x1280中显示完美,在 1080x1920 中看起来也比较清晰;切图后的图片文件大小也适中,应用的内存消耗也不会过高。

    状态栏高度:50 px
    导航栏高度:96 px
    标签栏高度:96 px
    Android最近出的手机都几乎去掉了实体键,把功能键移到了屏幕中,当然高度也是和标签栏一样的:96 px
    内容区域高度为:1038 px (1280-50-96-96=1038)

    图表尺寸

    屏幕大小启动图标操作栏图标上下文图标系统通知图标(白色)最细笔画
    320×480 px48×48 px32×32 px16×16 px24×24 px不小于2 px
    480×800px /480×854px /540×960px72×72 px48×48 px24×24 px36×36 px不小于3 px
    720×1280 px48×48 dp32×32 dp16×16 dp24×24 dp不小于2 dp
    1080×1920 px144×144 px96×96 px48×48 px72×72 px不小于6 px

    ps: Android设计规范中, 使用的单位是dp, dp在安卓机上不同的密度转换后的px 是不一样的

    字体

    Android 上的字体为: Droid sans fallback ,是谷歌自己的字体,与微软雅黑很像。
    Android的字体大小调查结论是:

    Paste_Image.png
    Paste_Image.png

    颜色值

    Android颜色值取值为十六进制的值 比如一绿色的值, 给开发的值为 #5bc43e



    
    
    博客原文:http://www.jianshu.com/p/67ab63723e54
    
    UI设计初学者应该怎样学习: https://www.zhihu.com/question/19954439
    
    UI设计分析:http://sc.chinaz.com/info/160611581801.htm
    
    展开全文
  • 苹果在WWDC2017上重磅发布iOS11,其中一项重大更新就是对App Sore的全新改版,我们一起来看看具体有哪些变化,以及对我们会带来哪些影响。App Store的分类变化在iOS10以前,App Store的几大分类为:精品推荐、类别、...
  • Windows系统下上架iOSAPP

    2018-04-13 09:37:49
    2018最新整理iOS app上架app详细教程上架iOS需要一个付费688的开发者账号,还没有的话申请一个或者借用。申请苹果开发者账号教程上架App Store之前是先安装到...1、创建APP身份证(App IDs)2、申请iOS发布证书3、申...
  • 今天就由本菜鸟给大家做一个简单的IOSApp消息推送教程吧!一切从0开始,包括XCode6, IOS8, 以及苹果开发者中心最新如何注册应用,申请证书以及下载配置概要文件,相信很多刚开始接触ios的人会很想了解一下。(ps:...
  • 1 上传至apple developer 1.1 上传准备工作 更新上架和发布上架不同,在原始版本首次上架的... Build Settings/Code Signing中将之前真机调试用的developer调试证书换成distribution发布证书,然后在product/sche
  • APP首次启动引导界面和启动界面设置——iOS开发。及NSUserDefaults的使用
  • iOS链接跳转到App

    2018-03-14 13:45:30
    可行的方案大概有三种: 一、直接使用URL Scheme。(优点:十分简单,在plist文件中配置一个scheme,点击短信中的scheme或者将scheme输入到浏览器中就可以...二、使用iOS9之后的新特性,通用链接(Universal Links...
  • 2017年1月22日一.iOS APP从打包到发布appStore完整流程 1.首先确保代码里面连接的是正式环境,选择上传appStore对应的pp文件(如果1.3.8.1包在appstore不是已经审核通过,都可以再次用1.3.8.1版本上传,只要bulid和...
  • 1.尺寸以及分辨率  iPhone的界面尺寸不用多说,640*960是基本OK的,也可以是适应5S的640*1136,马上iPhone 6也快来了(随便吐槽一下网上曝的... iPhone的APP界面一般由状态栏、导航栏、主菜单栏和中间的内容区域组
  • 本人已经测试,在5c/6 iOS8.3系统 、6 iOS9.1系统和 5s iOS7.1系统中可以正常跳转1.跳转到自己的项目中在需要调转的按钮动作中添加如下的代码,就会跳转到设置中自己的app的设置界面,这里会有通知和位置权限的设置...
  • 在我们的应用中有时候需要对应用的权限做一些修改,但是有无法直接的在App中进行操作,有些需要用户到设置中心去进行修改。怎么办呢?直接告诉客户去系统中心修改,呃(⊙o⊙)…客户可能会觉得太麻烦,今天呢我们来说...
  • 在Visual Studio里面你可以直接用拖拽的方式来编辑和设计iOS App的用户界面,还有 Android 界面设计,也是在Visual Studio中直接搞定。C Sharp 可以在 Windows 平台上完整的编译 Android 和 ...
1 2 3 4 5 ... 20
收藏数 86,172
精华内容 34,468
关键字:

app ios 发布 界面截图