国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ WeChat アプレット WeChatの開発 iOS開発用のWeChatチャットページの実裝

iOS開発用のWeChatチャットページの実裝

Feb 15, 2017 am 11:00 AM
IOS ui

  聊天界面的效果圖如下:在下面的聊天界面中中用到了3類cell,一類是顯示文字和表情的,一類是顯示錄音的,一類是顯示圖片的。當(dāng)點擊圖片時會跳轉(zhuǎn)到另一個Controller中來進行圖片顯示,在圖片顯示頁面中添加了一個捏合的手勢。點擊播放按鈕,會播放錄制的音頻,cell的大學(xué)會根據(jù)內(nèi)容的多少來調(diào)整,而cell中textView的高度是通過約束來設(shè)置的。

iOS開發(fā)之微信聊天頁面實現(xiàn)

  一,定義我們要用的cell,代碼如下:

    1,顯示表情和text的cell,代碼如下,需要根據(jù)NSMutableAttributedString求出bound,然后改變cell上的ImageView和TextView的寬度的約束值,動態(tài)的調(diào)整氣泡的大小,具體代碼如下:

#import "TextCell.h"

@interface TextCell()

@property (strong, nonatomic) IBOutlet UIImageView *headImageView;
@property (strong, nonatomic) IBOutlet UIImageView *chatBgImageView;
@property (strong, nonatomic) IBOutlet UITextView *chatTextView;
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *chatBgImageWidthConstraint;
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *chatTextWidthConstaint;
@property (strong, nonatomic) NSMutableAttributedString *attrString;

@end

@implementation TextCell

-(void)setCellValue:(NSMutableAttributedString *)str
{
    //移除約束
    [self removeConstraint:_chatBgImageWidthConstraint];
    [self removeConstraint:_chatTextWidthConstaint];
    
    self.attrString = str;
    NSLog(@"%@",self.attrString);
    
    //由text計算出text的寬高
      CGRect bound = [self.attrString boundingRectWithSize:CGSizeMake(150, 1000) options:NSStringDrawingUsesLineFragmentOrigin context:nil];
   
    //根據(jù)text的寬高來重新設(shè)置新的約束
    //背景的寬
    NSString *widthImageString;
    NSArray *tempArray;
    
    widthImageString = [NSString stringWithFormat:@"H:[_chatBgImageView(%f)]", bound.size.width+45];
    tempArray = [NSLayoutConstraint constraintsWithVisualFormat:widthImageString options:0 metrics:0 views:NSDictionaryOfVariableBindings(_chatBgImageView)];
    _chatBgImageWidthConstraint = tempArray[0];
    [self addConstraint:self.chatBgImageWidthConstraint];
    
    widthImageString = [NSString stringWithFormat:@"H:[_chatTextView(%f)]", bound.size.width+20];
    tempArray = [NSLayoutConstraint constraintsWithVisualFormat:widthImageString options:0 metrics:0 views:NSDictionaryOfVariableBindings(_chatTextView)];
    _chatBgImageWidthConstraint = tempArray[0];
    [self addConstraint:self.chatBgImageWidthConstraint];
    
    //設(shè)置圖片
    UIImage *image = [UIImage imageNamed:@"chatfrom_bg_normal.png"];
    image = [image resizableImageWithCapInsets:(UIEdgeInsetsMake(image.size.height * 0.6, image.size.width * 0.4, image.size.height * 0.3, image.size.width * 0.4))];
    
    //image = [image stretchableImageWithLeftCapWidth:image.size.width * 0.5 topCapHeight:image.size.height * 0.5];
    
    
    
    [self.chatBgImageView setImage:image];
    
    self.chatTextView.attributedText = str;
    
    
}

@end

 2.顯示圖片的cell,通過block回調(diào)把圖片傳到Controller中,用于放大圖片使用。

#import "MyImageCell.h"

@interface MyImageCell()
@property (strong, nonatomic) IBOutlet UIImageView *bgImageView;
@property (strong, nonatomic) IBOutlet UIButton *imageButton;
@property (strong, nonatomic) ButtonImageBlock imageBlock;
@property (strong, nonatomic) UIImage *buttonImage;

@end

@implementation MyImageCell

-(void)setCellValue:(UIImage *)sendImage
{
    self.buttonImage = sendImage;
    UIImage *image = [UIImage imageNamed:@"chatto_bg_normal.png"];
    image = [image resizableImageWithCapInsets:(UIEdgeInsetsMake(image.size.height * 0.6, image.size.width * 0.4, image.size.height * 0.3, image.size.width * 0.4))];
    [self.bgImageView setImage:image];
    [self.imageButton setImage:sendImage forState:UIControlStateNormal];

}

-(void)setButtonImageBlock:(ButtonImageBlock)block
{
    self.imageBlock = block;
}

- (IBAction)tapImageButton:(id)sender {
    self.imageBlock(self.buttonImage);
}

@end

 3.顯示錄音的cell,點擊cell上的button,播放對應(yīng)的錄音,代碼如下:

#import "VoiceCellTableViewCell.h"

@interface VoiceCellTableViewCell()

@property (strong, nonatomic) NSURL *playURL;
@property (strong, nonatomic) AVAudioPlayer *audioPlayer;

@end

@implementation VoiceCellTableViewCell

-(void)setCellValue:(NSDictionary *)dic
{
    _playURL = dic[@"body"][@"content"];
}

- (IBAction)tapVoiceButton:(id)sender {
    
    
    NSError *error = nil;
    AVAudioPlayer *player = [[AVAudioPlayer alloc]initWithContentsOfURL:_playURL error:&error];
    if (error) {
        NSLog(@"播放錯誤:%@",[error description]);
    }
    self.audioPlayer = player;
    [self.audioPlayer play];
}
@end

二,cell搞定后要實現(xiàn)我們的ChatController部分    

ChatController.m中的延展和枚舉代碼如下:

//枚舉Cell類型
typedef enum : NSUInteger {
    SendText,
    SendVoice,
    SendImage
} MySendContentType;


//枚舉用戶類型
typedef enum : NSUInteger {
    MySelf,
    MyFriend
} UserType;

@interface ChatViewController ()

//工具欄
@property (nonatomic,strong) ToolView *toolView;

//音量圖片
@property (strong, nonatomic) UIImageView *volumeImageView;

//工具欄的高約束,用于當(dāng)輸入文字過多時改變工具欄的約束
@property (strong, nonatomic) NSLayoutConstraint *tooViewConstraintHeight;

//存放所有的cell中的內(nèi)容
@property (strong, nonatomic) NSMutableArray *dataSource;

//storyBoard上的控件
@property (strong, nonatomic) IBOutlet UITableView *myTableView;

//用戶類型
@property (assign, nonatomic) UserType userType;

//從相冊獲取圖片
@property (strong, nonatomic) UIImagePickerController *imagePiceker;

@end

實現(xiàn)工具欄中的回調(diào)的代碼如下,通過Block,工具欄和ViewController交互

//實現(xiàn)工具欄的回調(diào)
-(void)setToolViewBlock
{
    __weak __block ChatViewController *copy_self = self;
    //通過block回調(diào)接收到toolView中的text
    [self.toolView setMyTextBlock:^(NSString *myText) {
        NSLog(@"%@",myText);
        
        [copy_self sendMessage:SendText Content:myText];
    }];
    
    
    //回調(diào)輸入框的contentSize,改變工具欄的高度
    [self.toolView setContentSizeBlock:^(CGSize contentSize) {
         [copy_self updateHeight:contentSize];
    }];
    
    
    //獲取錄音聲量,用于聲音音量的提示
    [self.toolView setAudioVolumeBlock:^(CGFloat volume) {
        
        copy_self.volumeImageView.hidden = NO;
        int index = (int)(volume*100)%6+1;
        [copy_self.volumeImageView setImage:[UIImage imageNamed:[NSString stringWithFormat:@"record_animate_%02d.png",index]]];
    }];
    
    //獲取錄音地址(用于錄音播放方法)
    [self.toolView setAudioURLBlock:^(NSURL *audioURL) {
        copy_self.volumeImageView.hidden = YES;
        
        [copy_self sendMessage:SendVoice Content:audioURL];
    }];
    
    //錄音取消(錄音取消后,把音量圖片進行隱藏)
    [self.toolView setCancelRecordBlock:^(int flag) {
        if (flag == 1) {
            copy_self.volumeImageView.hidden = YES;
        }
    }];
    
    
    //擴展功能回調(diào)
    [self.toolView setExtendFunctionBlock:^(int buttonTag) {
        switch (buttonTag) {
            case 1:
                //從相冊獲取
                [copy_self presentViewController:copy_self.imagePiceker animated:YES completion:^{
                    
                }];
                break;
            case 2:
                //拍照
                break;
                
            default:
                break;
        }
    }];
}

把聊天工具欄中返回的內(nèi)容顯示在tableView中,代碼如下:

//發(fā)送消息
-(void)sendMessage:(MySendContentType) sendType Content:(id)content
{
    
    //把收到的url封裝成字典
    UserType userType = self.userType;
    
    NSMutableDictionary *tempDic = [[NSMutableDictionary alloc] initWithCapacity:2];
    [tempDic setValue:@(userType) forKey:@"userType"];
    
    NSDictionary *bodyDic = @{@"type":@(sendType),
                              @"content":content};
    [tempDic setValue:bodyDic forKey:@"body"];
    [self.dataSource addObject:tempDic];
    
    //重載tableView
    [self.myTableView  reloadData];
    
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:self.dataSource.count-1 inSection:0];
    
    [self.myTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];
    
 
}

根據(jù)ToolView中回調(diào)接口,獲取工具欄中textView的ContentSize,通過ContentSize來調(diào)整ToolView的高度約束,代碼如下:

//更新toolView的高度約束
-(void)updateHeight:(CGSize)contentSize
{
    float height = contentSize.height + 18;
    if (height <= 80) {
        [self.view removeConstraint:self.tooViewConstraintHeight];
        
        NSString *string = [NSString stringWithFormat:@"V:[_toolView(%f)]", height];
        
        NSArray * tooViewConstraintV = [NSLayoutConstraint constraintsWithVisualFormat:string options:0 metrics:0 views:NSDictionaryOfVariableBindings(_toolView)];
        self.tooViewConstraintHeight = tooViewConstraintV[0];
        [self.view addConstraint:self.tooViewConstraintHeight];
    }
}

從本地獲取圖片,并顯示在相應(yīng)的Cell上,代碼如下:

//獲取圖片后要做的方法
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    UIImage *pickerImage = info[UIImagePickerControllerEditedImage];
    
    //發(fā)送圖片
    [self sendMessage:SendImage Content:pickerImage];
    
    [self dismissViewControllerAnimated:YES completion:^{}];
    
}

-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
    //在ImagePickerView中點擊取消時回到原來的界面
    [self dismissViewControllerAnimated:YES completion:^{}];
}

把NSString 轉(zhuǎn)換成NSMutableAttributeString,用于顯示表情,代碼如下:

//顯示表情,用屬性字符串顯示表情
-(NSMutableAttributedString *)showFace:(NSString *)str
{
    //加載plist文件中的數(shù)據(jù)
    NSBundle *bundle = [NSBundle mainBundle];
    //尋找資源的路徑
    NSString *path = [bundle pathForResource:@"emoticons" ofType:@"plist"];
    //獲取plist中的數(shù)據(jù)
    NSArray *face = [[NSArray alloc] initWithContentsOfFile:path];
    
    //創(chuàng)建一個可變的屬性字符串
    
    NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:str];
    
    UIFont *baseFont = [UIFont systemFontOfSize:17];
    [attributeString addAttribute:NSFontAttributeName value:baseFont
                       range:NSMakeRange(0, str.length)];
    
    //正則匹配要替換的文字的范圍
    //正則表達(dá)式
    NSString * pattern = @"\\[[a-zA-Z0-9\\u4e00-\\u9fa5]+\\]";
    NSError *error = nil;
    NSRegularExpression * re = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];
    
    if (!re) {
        NSLog(@"%@", [error localizedDescription]);
    }
    
    //通過正則表達(dá)式來匹配字符串
    NSArray *resultArray = [re matchesInString:str options:0 range:NSMakeRange(0, str.length)];
    
    
    //用來存放字典,字典中存儲的是圖片和圖片對應(yīng)的位置
    NSMutableArray *imageArray = [NSMutableArray arrayWithCapacity:resultArray.count];
    
    //根據(jù)匹配范圍來用圖片進行相應(yīng)的替換
    for(NSTextCheckingResult *match in resultArray) {
        //獲取數(shù)組元素中得到range
        NSRange range = [match range];
        
        //獲取原字符串中對應(yīng)的值
        NSString *subStr = [str substringWithRange:range];
        
        for (int i = 0; i < face.count; i ++)
        {
            if ([face[i][@"chs"] isEqualToString:subStr])
            {
                
                //face[i][@"gif"]就是我們要加載的圖片
                //新建文字附件來存放我們的圖片
                NSTextAttachment *textAttachment = [[NSTextAttachment alloc] init];
                
                //給附件添加圖片
                textAttachment.image = [UIImage imageNamed:face[i][@"png"]];
                
                //把附件轉(zhuǎn)換成可變字符串,用于替換掉源字符串中的表情文字
                NSAttributedString *imageStr = [NSAttributedString attributedStringWithAttachment:textAttachment];
                
                //把圖片和圖片對應(yīng)的位置存入字典中
                NSMutableDictionary *imageDic = [NSMutableDictionary dictionaryWithCapacity:2];
                [imageDic setObject:imageStr forKey:@"image"];
                [imageDic setObject:[NSValue valueWithRange:range] forKey:@"range"];
                
                //把字典存入數(shù)組中
                [imageArray addObject:imageDic];
                
            }
        }
    }
    
    //從后往前替換
    for (int i = imageArray.count -1; i >= 0; i--)
    {
        NSRange range;
        [imageArray[i][@"range"] getValue:&range];
        //進行替換
        [attributeString replaceCharactersInRange:range withAttributedString:imageArray[i][@"image"]];
        
    }
    
    return  attributeString;
}

根據(jù)Cell顯示內(nèi)容來調(diào)整Cell的高度,代碼如下:

//調(diào)整cell的高度
-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    
    //根據(jù)文字計算cell的高度
    if ([self.dataSource[indexPath.row][@"body"][@"type"] isEqualToNumber:@(SendText)]) {
        NSMutableAttributedString *contentText = [self showFace:self.dataSource[indexPath.row][@"body"][@"content"]];
        
        CGRect textBound = [contentText boundingRectWithSize:CGSizeMake(150, 1000) options:NSStringDrawingUsesLineFragmentOrigin context:nil];
        
        float height = textBound.size.height + 40;
        return height;
    }
    if ([self.dataSource[indexPath.row][@"body"][@"type"] isEqualToNumber:@(SendVoice)])
    {
        return 73;
    }
    
    if ([self.dataSource[indexPath.row][@"body"][@"type"] isEqualToNumber:@(SendImage)])
    {
        return 125;
    }
    
    return 100;
 }

根據(jù)cell內(nèi)容和用戶類型,來選擇Cell,代碼如下:

//設(shè)置cell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //根據(jù)類型選cell
    MySendContentType contentType = [self.dataSource[indexPath.row][@"body"][@"type"] integerValue];
    
    
    if ([self.dataSource[indexPath.row][@"userType"]  isEqual: @(MyFriend)]) {
        switch (contentType) {
            case SendText:
            {
                TextCell *cell = [tableView dequeueReusableCellWithIdentifier:@"textCell" forIndexPath:indexPath];
                NSMutableAttributedString *contentText = [self showFace:self.dataSource[indexPath.row][@"body"][@"content"]];
                [cell setCellValue:contentText];
                return cell;
            }
                break;
                
            case SendImage:
            {
                heImageCell *cell = [tableView dequeueReusableCellWithIdentifier:@"heImageCell" forIndexPath:indexPath];
                [cell setCellValue:self.dataSource[indexPath.row][@"body"][@"content"]];
                
                
                __weak __block ChatViewController *copy_self = self;
                
                //傳出cell中的圖片
                [cell setButtonImageBlock:^(UIImage *image) {
                    [copy_self displaySendImage:image];
                }];
                return cell;
            }
                break;
                
            case SendVoice:
            {
                VoiceCellTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"heVoiceCell" forIndexPath:indexPath];
                [cell setCellValue:self.dataSource[indexPath.row]];
                return cell;
            }

                break;
                
            default:
                break;
        }

    }
        

    if ([self.dataSource[indexPath.row][@"userType"]  isEqual: @(MySelf)]) {
    
        switch (contentType) {
            case SendText:
            {
                TextCell *cell = [tableView dequeueReusableCellWithIdentifier:@"myselfTextCell" forIndexPath:indexPath];
                NSMutableAttributedString *contentText = [self showFace:self.dataSource[indexPath.row][@"body"][@"content"]];
                [cell setCellValue:contentText];
                return cell;
            }
            break;
            
            case SendImage:
            {
                MyImageCell *cell = [tableView dequeueReusableCellWithIdentifier:@"myImageCell" forIndexPath:indexPath];
                [cell setCellValue:self.dataSource[indexPath.row][@"body"][@"content"]];
                
                __weak __block ChatViewController *copy_self = self;
                
                //傳出cell中的圖片
                [cell setButtonImageBlock:^(UIImage *image) {
                    [copy_self displaySendImage:image];
                }];

                
                return cell;
            }
                break;
            
            case SendVoice:
            {
                VoiceCellTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"myVoiceCell" forIndexPath:indexPath];
                [cell setCellValue:self.dataSource[indexPath.row]];
                return cell;
            }

                break;
                
            default:
                break;
        }
    }
    UITableViewCell *cell;
    return cell;
}

點擊發(fā)送的圖片來放大圖片代碼如下:

//發(fā)送圖片的放大
-(void) displaySendImage : (UIImage *)image
{
    //把照片傳到放大的controller中
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
    
    ImageViewController *imageController = [storyboard instantiateViewControllerWithIdentifier:@"imageController"];
    [imageController setValue:image forKeyPath:@"image"];
    
   [self.navigationController pushViewController:imageController animated:YES];
    

}

根據(jù)鍵盤的高度來調(diào)整ToolView的位置,代碼如下:

//鍵盤出來的時候調(diào)整tooView的位置
-(void) keyChange:(NSNotification *) notify
{
    NSDictionary *dic = notify.userInfo;
    
    
    CGRect endKey = [dic[@"UIKeyboardFrameEndUserInfoKey"] CGRectValue];
    //坐標(biāo)系的轉(zhuǎn)換
    CGRect endKeySwap = [self.view convertRect:endKey fromView:self.view.window];
    //運動時間
    [UIView animateWithDuration:[dic[UIKeyboardAnimationDurationUserInfoKey] floatValue] animations:^{
        
        [UIView setAnimationCurve:[dic[UIKeyboardAnimationCurveUserInfoKey] doubleValue]];
        CGRect frame = self.view.frame;
        
        frame.size.height = endKeySwap.origin.y;
        
        self.view.frame = frame;
        [self.view layoutIfNeeded];
    }];
}

代碼有點多,不過在關(guān)鍵的部分都加有注釋,在圖片顯示View中通過捏合手勢來調(diào)整圖片的大小,代碼如下:

- (IBAction)tapPichGesture:(id)sender {
    UIPinchGestureRecognizer *gesture = sender;
    
    //手勢改變時
    if (gesture.state == UIGestureRecognizerStateChanged)
    {
        
        //捏合手勢中scale屬性記錄的縮放比例
        self.myImageView.transform = CGAffineTransformMakeScale(gesture.scale, gesture.scale);
    }
    
}

更多iOS開發(fā)之微信聊天頁面實現(xiàn)?相關(guān)文章請關(guān)注PHP中文網(wǎng)!

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Elden Ring UI が表示され続けるのはなぜですか? Elden Ring UI が表示され続けるのはなぜですか? Mar 11, 2024 pm 04:31 PM

エルデンズリングでは、このゲームの UI ページは一定時間が経過すると自動的に非表示になります。UI が常に表示される方法を知らないプレイヤーも多いです。プレイヤーはディスプレイとサウンドの設(shè)定でゲージの表示設(shè)定を選択できます。クリックすると回転します。の上。 Elden Ring UI が表示され続けるのはなぜですか? 1. まず、メインメニューに入った後、[システム構(gòu)成] をクリックします。 2. [表示とサウンドの設(shè)定]インターフェースで、メーターの表示設(shè)定を選択します。 3. 「有効にする」をクリックして完了します。

Vue の一般的な UI コンポーネント ライブラリは何ですか? Vue の一般的な UI コンポーネント ライブラリは何ですか? Jun 11, 2023 am 11:47 AM

Vue は、コンポーネントベースのアプローチを使用して Web アプリケーションを構(gòu)築する人気のある JavaScript フレームワークです。 Vue エコシステムには、美しいインターフェイスを迅速に構(gòu)築し、豊富な機能とインタラクティブな効果を提供するのに役立つ UI コンポーネント ライブラリが多數(shù)あります。この記事では、一般的な VueUI コンポーネント ライブラリをいくつか紹介します。 ElementUIElementUI は、Ele.me チームによって開発された Vue コンポーネント ライブラリです。

2人の中國のGoogle研究者が初の純粋に視覚的な「モバイルUI理解」モデルを発表、SOTAを刷新する4つの主要なタスク 2人の中國のGoogle研究者が初の純粋に視覚的な「モバイルUI理解」モデルを発表、SOTAを刷新する4つの主要なタスク Apr 12, 2023 pm 04:40 PM

AIにとって「攜帯電話で遊ぶ」ということは簡単なことではなく、さまざまなユーザーインターフェース(UI)を識別するだけでも大きな問題であり、各コンポーネントの種類を識別するだけでなく、使用されている記號、位置を識別して機能を決定する必要がありますコンポーネントの。モバイル デバイスの UI を理解すると、UI の自動化など、人間とコンピューターのさまざまな対話タスクを?qū)g現(xiàn)するのに役立ちます。モバイル UI モデリングに関するこれまでの研究は通常、畫面のビュー階層情報に依存し、UI の構(gòu)造データを直接利用することで、畫面ピクセルから始まるコンポーネントの識別の問題を回避していました。ただし、ビュー階層はすべてのシナリオで使用できるわけではありません。通常、この方法では、オブジェクトの説明が欠落していたり??、構(gòu)造情報が間違っているため、誤った結(jié)果が出力されます。

ウイってどういう意味ですか? ウイってどういう意味ですか? Mar 14, 2024 pm 03:20 PM

UIは「ユーザーインターフェイス」の略稱で、主に人間とコンピューターの対話、操作ロジック、ソフトウェアの美しいインターフェイスを記述するために使用されます。 UIデザインの目的は、ソフトウェアの操作をより簡単かつ快適にし、ソフトウェアの位置付けや特性を十分に反映させることです。一般的なUIデザインは物理UIと仮想UIに分けられ、インターネット分野では仮想UIが広く使われています。

最も人気のある jQuery モバイル UI フレームワークを探索する 最も人気のある jQuery モバイル UI フレームワークを探索する Feb 27, 2024 pm 12:03 PM

jQuery モバイル UI フレームワークは、モバイル アプリケーションを開発するためのツールであり、豊富なインターフェイス コンポーネントとインタラクティブな効果を提供し、開発者が優(yōu)れたモバイル ユーザー インターフェイスを迅速に構(gòu)築できるようにします。この記事では、最も人気のある jQuery モバイル UI フレームワークのいくつかを検討し、読者がこれらのフレームワークをよりよく理解して使用できるように、具體的なコード例を示します。 1.jQueryMobiljQueryMobile は、HTML5 と CSS3 に基づくオープンソースのモバイル UI フレームワークです。

Android 15 Beta 4の包括的なテストが完了し、安定版リリースへのカウントダウンが始まりました Android 15 Beta 4の包括的なテストが完了し、安定版リリースへのカウントダウンが始まりました Jul 29, 2024 pm 07:57 PM

數(shù)日前、Google は Android 15 ベータ 4 アップデートを?qū)澫螭趣胜?Pixel スマートフォンおよびタブレット ユーザーに正式にプッシュしました。これは、Android 15 オペレーティング システムがプラットフォームの安定段階に入ったことを示し、その安定バージョンが世界中のユーザー向けに正式にリリースされることを示しています。次の數(shù)日。同時に、この開発はサムスン電子の Galaxy デバイス シリーズに新たな活力を注入し、OneUI7.0 バージョンの開発プロセスを加速します。 1.[Android15Beta4 は Samsung OneUI7.0 安定ビルドを推進](https://www.cnbeta.com/articles/tech/1427022.htm) Android15Bet を使用

ウイはどういう意味ですか ウイはどういう意味ですか Mar 14, 2024 pm 03:09 PM

UIはユーザーインターフェースの正式名稱で、ソフトウェアにおける人間とコンピューターの対話、操作ロジック、美しいインターフェースのデザインを指します。物理UIと仮想UIに分けられ、モバイルインターネットでは仮想UIが広く使われています。優(yōu)れた UI デザインは、ソフトウェアの見た目を美しくするだけでなく、ソフトウェアの位置付けや特性を十分に反映した快適で簡単な操作を?qū)g現(xiàn)します。

ux と ui デザインの違いは何ですか ux と ui デザインの違いは何ですか Sep 27, 2022 pm 03:52 PM

ux と ui デザインの違い: 1. UX はインターフェースを使いやすくし、UI はインターフェースをより美しくします; 2. UX はユーザーの目標(biāo)を達(dá)成することを可能にし、UI はインターフェースをブランドセンスを高めます; 3. UX コア目標(biāo)はユーザーをタスクの完了に導(dǎo)きますが、UI はそうではありません; 4. UI と UX の成果物は異なります。UX の出力には UX エクスペリエンス レポート、機能定義、機能計畫、プロジェクトの進捗狀況などが含まれますが、UI の出力には視覚的な情報が含まれます。インタラクション、ビジュアルデザイン、ブランドデザイン、モーションデザイン、コンポーネントデザイン、デザイン言語など

See all articles