我正在尝试创建一个视频库.
要显示我正在使用的视频UICollectionView
.每个UICollectionViewCell
都有一个背景与视频缩略图.要生成视频缩略图,我使用的是逻辑方法:
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:url options:nil];
AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
generator.appliesPreferredTrackTransform = YES;
CMTime time = CMTimeMakeWithSeconds(0,15);
AVAssetImageGeneratorCompletionHandler handler = ^(CMTime timeRequested, CGImageRef image, CMTime timeActual, AVAssetImageGeneratorResult result, NSError *error)
{
NSLog(@"handler^()");
if (result == AVAssetImageGeneratorSucceeded)
{
thumbnail = [UIImage imageWithCGImage: image];
success(thumbnail);
}
else
{
failure(error);
}
};
CGSize maximumSize = CGSizeMake(CLIPBOARD_COLLECTION_VIEW_CELL_WIDTH, CLIPBOARD_COLLECTION_VIEW_CELL_HEIGHT);
generator.maximumSize = maximumSize;
NSLog(@"generateCGImagesAsynchronouslyForTimes:");
[generator generateCGImagesAsynchronouslyForTimes:[NSArray arrayWithObject:[NSValue valueWithCMTime:time]] completionHandler:handler];
Run Code Online (Sandbox Code Playgroud)
我注意到generateCGImagesAsynchronouslyForTimes
它不能完全异步工作.此方法调用之间有一个时间空间.当我加载表格视图单元格时,这会导致很大的延迟.如果我评论行[generator generateCGImagesAsynchronouslyForTimes:[NSArray arrayWithObject:[NSValue valueWithCMTime:time]] completionHandler:handler] …
我试图通过访问ETS模块创建一个简单的Erlang进程.
我的源代码包括:
流程创建:
start_message_channel() ->
Table = ets:new(messages, [ordered_set, named_table]),
Channel = spawn(?MODULE, channel, []),
{Channel, {table, Table}}.
Run Code Online (Sandbox Code Playgroud)流程逻辑:
channel() ->
receive
{Sender, {send_message, {Message, Table}}} ->
ets:insert(Table, {message, Message}),
Sender ! {self(), {status, success}};
{Sender, {receive_message, Table}} ->
{message, Message} = ets:first(Table),
Sender ! {self(), {status, {success, Message}}};
_ ->
throw(incorrect_protocol_exception)
end.
Run Code Online (Sandbox Code Playgroud)与流程沟通
send_message_to_message_channel({Channel, {table, Table}}, Message) ->
Channel ! {self(), {send_message, {Message, Table}}},
receive
{Channel, {status, success}} ->
io:format("Message sent!~n");
{Channel, {status, failure}} ->
io:format("Message failed to send!~n"); …
Run Code Online (Sandbox Code Playgroud)avasset ×1
concurrency ×1
erlang ×1
erlang-shell ×1
ets ×1
ios ×1
objective-c ×1
uitableview ×1