小编bla*_*ool的帖子

在Xamarin核心项目中使用HttpClient

我正在为多个平台做一个项目,我遵循最佳实践并创建了一个核心项目,以包含所有平台上相同的所有代码.为了进行网络通信,我想使用HttpClient,这似乎是推荐的与Web服务进行通信的方法.

我不是在做一个PCL,而只是一个包含核心项目的标准C#库.但是,似乎没有HttpClient的常见实现,只有平台特定的实现.我无法在我的核心中引用和使用它,但仅限于我的Android和iOS项目.

我非常希望在我的核心项目中拥有所有网络代码,因为我看到它有两个选项 - 我都不喜欢它们.

  1. 创建一个可以在核心项目中使用的通用接口,该项目在Android和iOS上作为包装器实现.
  2. 使用核心项目中支持的另一种技术 - 我在想webclient等.

什么是推荐的方法,为什么Xamarin没有将HttpClient作为公共库提供?

希望有人可以帮忙,谢谢

dotnet-httpclient xamarin

7
推荐指数
1
解决办法
1万
查看次数

iOS 4 GCD问题

我查看了WWDC 2010中的一些演示文稿,并阅读了大部分有关块和并发性的文档,并且在Grand Central Dispatch中使用带有串行队列的块有几个问题.我有一个iOS 4项目,它有一个scrollview和一个图像信息字典 - 图像的URL等等.我想使用GCD和块来下载图像并将它们放在我的scrollview中,从而不会阻塞主线程.我写了下面似乎有用的代码:

for (NSDictionary* dict in images)
{
     dispatch_async(image_queue, ^{

           NSString* urlString = [dict objectForKey:@"url"];
           NSURL* url = [NSURL URLWithString:urlString];
           NSData* imageData = [[NSData alloc] initWithContentsOfURL:url];
           UIImage* image = [UIImage imageWithData:imageData];
           UIImageView* imageView = // initialize imageView with image;      

           dispatch_async(dispatch_get_main_queue(), ^{
                [self.scrollView addSubview:imageView];
           });
           [imageData release];
      });
}
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 根据并发指南,我不应该从非标量类型的封闭范围中捕获变量 - 在我的代码中我捕获了dict,它是一个NSDictionary*对象.如果我不被允许捕获它,我该如何编写代码呢?块只捕获实际使用的封闭范围中的变量吗?

  2. 如果在通过串行调度队列获取所有图像之前离开当前的ViewController会发生什么?我不认为他们知道创建它们的ViewController已经消失所以当他们执行完成处理程序时会发生什么,我将图像视图插入主线程的scrollview?它会导致错误或什么?当我的ViewController消失时,如何取消串行队列上的任何剩余操作?

最好的祝福,

iphone objective-c grand-central-dispatch objective-c-blocks

6
推荐指数
1
解决办法
6645
查看次数

使用AVFoundation在视频之间快速切换

我正在编写一个应用程序,用户最多可以录制6个视频片段,每个片段的持续时间为2秒.当录制视频剪辑时,用户可以使用6个按钮进行播放 - 每个剪辑一个.然后,用户可以通过在6个剪辑之间切换来录制电影.问题是,当用户按下按钮时,我需要在6个剪辑之间进行近乎瞬时的切换 - 否则会丢失播放剪辑的错觉 - 该功能有点类似于App Store中名为CamBox的应用程序.

每当用户按下按钮时,我首先尝试使用AVPlayer中的AvPlayerItem和AVAsset初始化每个剪辑.播放器的输出在我的主视图中指向AVPlayerLayer.问题是加载和开始播放所花费的时间很长,这意味着当用户快速连续按下按钮时视频会滞后.

我决定尝试使用5个AVPlayers和5个AVPlayerLayers预加载所有剪辑.5 PlayerLayers被插入到我的主视图中,当用户按下按钮时,当前正在播放的AVPlayer被暂停和倒回,并且当前可见的AVPlayerLayer被隐藏.启动新的AVPlayer并显示相应的AVPlayerLayer.它工作得比我的第一个解决方案快得多,虽然不是瞬间但问题是我只能预加载4个剪辑,这意味着当用户按下播放最后两个按钮的按钮时,它会滞后很长时间.下面是我预加载剪辑的代码

-(void)loadVideos
{
  layers = [[NSMutableArray alloc] initWithCapacity:6];
  players = [[NSMutableArray alloc] initWithCapacity:6];

  for(int i = 1; i < 7; i++)
  {
      NSURL* fileURL = [NSURL fileURLWithPath:[self getFileName:i]];        
      AVPlayerItem* avPlayerItem = [[[AVPlayerItem alloc] initWithURL:fileURL] autorelease];
      [avPlayerItem addObserver:self forKeyPath:@"status" options:0 context:nil];   

      AVPlayer *avPlayer = [[[AVPlayer alloc] initWithPlayerItem:avPlayerItem] autorelease];

      [avPlayer addObserver:self forKeyPath:@"status" options:0 context:nil];   
      [avPlayer addObserver:self forKeyPath:@"currentItem" options:0 context:nil];   
      AVPlayerLayer* layer = [AVPlayerLayer playerLayerWithPlayer:avPlayer];
      layer.frame = self.playerView.bounds;
      [playerView.layer addSublayer:layer];
      [layers addObject:layer];
      [players …
Run Code Online (Sandbox Code Playgroud)

video avfoundation ios avplayer

5
推荐指数
1
解决办法
4176
查看次数

iOS 10 和 swift 2.3 中的 supportedInterfaceOrientations

我正在使用 Xcode 8 GM 并且有一个需要针对 iOS 10 更新的旧项目。

我发现我当前使用 Swift 2.2 版构建的应用商店在 iOS 10 上运行时不支持所需的界面定向功能

简单地说,当我覆盖 supportedInterfaceOrientations() 时,它在 iOS 10 上运行时永远不会被调用。

在以前的版本上它工作正常。

我可以看到签名已更改,因此 supportedInterfaceOrientations 现在是 var 而不是方法,但这似乎只适用于 Swift 3 而不适用于 Swift 2.3。当我尝试在 Swift 2.3 中作为 var 覆盖时,它不会编译,如果我使用旧签名,它在 iOS 10 下永远不会被调用

有任何想法吗?

swift ios10

5
推荐指数
1
解决办法
9551
查看次数

导航到新屏幕时如何保持 AppBar 和后退箭头静止

我希望在 Flutter 中的页面之间导航时使屏幕的上半部分显示为静态。

为了尝试实现这一目标,我使用了 Hero 小部件,并将其用在包含 AppBar 和我希望在推送新页面时显示为静态的其他内容的列上。

应用栏本身保持静态,但后退箭头在动画开始时消失,并在动画完成时重新出现。

当页面的其余部分动画到位时,如何让后退箭头始终保持可见?

 class FirstScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
          Hero(
            tag: 'top',
            child: Column(
              children: <Widget>[
                AppBar(
                  title: Text('First'),
                  backgroundColor: Color.fromARGB(255, 50, 64, 182),
                ),
                Container(
                  height: 80.0,
                )
              ],
            ),
          ),
          RaisedButton(
            child: Text('Next'),
            onPressed: () {
              Navigator.pushNamed(context, '/second');
            },
          ),
        ],
      ),
    );
  }
}

class SecondScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [ …
Run Code Online (Sandbox Code Playgroud)

flutter

5
推荐指数
1
解决办法
5353
查看次数

导航到新页面时保持键盘打开

我有一个有两个页面的应用程序 - 每个页面都包含一个文本字段,第一页还包含一个“下一步”按钮,该按钮将导航到第 2 页。

我的问题是这样的:当第 1 页上的文本字段获得焦点并且我按下“下一步”按钮时,键盘将在导航到下一个屏幕之前关闭。

有没有办法抑制这种行为,以便键盘保持打开状态,而不是先关闭然后在显示第 2 页时再次打开?

flutter

5
推荐指数
1
解决办法
4329
查看次数