AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-7242490

bli00's questions

Martin Hope
bli00
Asked: 2024-09-12 04:44:38 +0800 CST

Diferença entre `tokio::pin!` e `std::pin::pin!`?

  • 10

Originalmente, pensei que o primeiro era apenas uma reexportação do último, mas parece que não é o caso. Qual é a diferença entre as duas pin!macros e como decidir qual usar?

rust
  • 1 respostas
  • 41 Views
Martin Hope
bli00
Asked: 2024-08-02 06:41:00 +0800 CST

Como atualizar corretamente o `frame` em relação ao `updateUIViewController`

  • 6

Estou usando esta biblioteca de câmeras na qual o autor envolve um AVCaptureVideoPreviewLayerdentro de um UIViewControllerRepresentable( link ) para usá-lo como uma visualização da câmera. Dentro updateUIViewController, o autor enfileira a frameatualização com DispatchQueue.main.async:

    func updateUIViewController(_ uiViewController: UIViewController, context: Context) {
        previewLayer.videoGravity = gravity
        if previewLayer.superlayer == nil {
            uiViewController.view.layer.addSublayer(previewLayer)
        }
        // print(uiViewController.view.bounds) -- point A
        DispatchQueue.main.async {
            // print(uiViewController.view.bounds) -- point B
            self.previewLayer.frame = uiViewController.view.bounds
        }
    }

Pode haver discrepâncias entre point Ae point B, o que faz sentido, pois o uso DispatchQueue.main.asyncnão garante o pedido, mas não estou totalmente convencido de que essa abordagem esteja correta. Quero poder definir frameessa visualização usando algo como Preview().frame(width: 350, height: 500). No entanto, a falta de ordem aqui significa que dependendo de outras partes do aplicativo/visualizações, a view.frameatualização acontece em um cronograma desconhecido . Por exemplo, o seguinte:

import SwiftUI
import Aespa

@Observable
class ViewModel {
    @ObservationIgnored var aespaSession = Aespa.session(with: AespaOption(albumName: nil))
    @ObservationIgnored var preview: InteractivePreview {
        aespaSession.interactivePreview(
            gravity: .resizeAspectFill,
            option: InteractivePreviewOption()
        )
    }
    var show = false
}

struct ContentView: View {
    @State var viewModel = ViewModel()

    var body: some View {
        ZStack {
            VStack {
                Spacer()
                Button("Show Camera Preview") {
                    viewModel.show.toggle()
                }
            }
            .ignoresSafeArea()
            .zIndex(0)

            if viewModel.show {
                VStack {
                    viewModel.preview
                        .frame(width: 350, height: 500)
                    Spacer()
                }
                .zIndex(1)
            }
        }
    }
}

Impressões:

Point A: (0.0, 0.0, 393.0, 852.0)
Point B: (0.0, 0.0, 350.0, 500.0)

Mas se você alterar o código para outra coisa, talvez um plano de fundo diferente em .zIndex(0)(não mostrarei o código exato aqui, pois meu aplicativo não é trivial), ele poderá imprimir:

Point A: (0.0, 0.0, 393.0, 852.0)
Point B: (0.0, 0.0, 393.0, 852.0)

Então minha pergunta é. Qual é a maneira correta de definir view.frame? updateUIViewControllerobviamente está sendo chamado em alguma ordem determinística, mas não antes de bound"estabelecer". Não vejo um método mágico "updateViewOneLastTime"?

  • 1 respostas
  • 33 Views
Martin Hope
bli00
Asked: 2024-07-26 04:09:04 +0800 CST

Facilitando funções para usar CADisplayLink

  • 5

Preciso animar manualmente algo quadro a quadro no SwiftUI usando CADisplayLink, o que me fornece atualizações quadro a quadro. Para animar um valor de ato bde forma linear, a implementação é trivial, basta calcular uma taxa de mudança (b-a) / duratione aplicar esse delta ao valor em cada quadro.

No entanto, não estou encontrando nenhuma informação sobre como fazer atualizações quadro a quadro quando a animação não é linear . Posso, é claro, criar as funções de atenuação sozinho usando, por exemplo, o pacote numérico , mas parece um caso de uso muito comum para precisar de tanta implementação manual.

Onde estão as funções de flexibilização prontas para uso da Apple? Deveria haver um pacote de funções de easing que me permita recuperar yusando x, mas este post sugere que não há nenhum?

  • 1 respostas
  • 16 Views
Martin Hope
bli00
Asked: 2024-06-25 14:03:57 +0800 CST

Reagindo às alterações de permissão

  • 4

CLLocationManagerfornece uma maneira de reagir às alterações de autorização por meio do método do delegado locationManagerDidChangeAuthorization, mas não consegui encontrar o equivalente para outros tipos de permissão. Ou seja, o acesso à câmera ou à biblioteca de fotos parece não fornecer nenhuma maneira de reagir ao usuário ao configurar e alterar a autorização.

Acho que poderia me aprofundar em cada método que chamo e detectar qualquer erro relacionado à negação da permissão do recurso, mas essa é uma abordagem realmente inferior. Existe uma maneira de reagir de forma determinística às alterações de autorização em geral para o desenvolvimento do iOS?

  • 1 respostas
  • 25 Views
Martin Hope
bli00
Asked: 2024-06-12 09:36:04 +0800 CST

Segurança de simultaneidade durante atualizações de frames no Swift

  • 6

Eu tenho um método chamado renderque é chamado em cada quadro para desenhar algo na tela usando Metal. Ele está renderizando uma série de pontos armazenados dentro da classe. No entanto, ocasionalmente preciso atualizar esse conjunto de pontos. Estou lutando para encontrar uma solução que possa atualizar esses pontos de maneira segura para a simultaneidade.

Ou seja, ao rendertentar acessar esse array, outro thread pode estar atualizando-o, causando uma falha. Além disso, renderé síncrono e não pode bloquear ou aguardar a atualização. Este parece ser um problema de simultaneidade comum, por isso estou procurando ajuda aqui para ver quais soluções existem.

Para generalizar o problema - há alguma função síncrona que é chamada com muita frequência, ela precisa de acesso a um dado que pode ser atualizado por outro thread. Eu tenho controle sobre o rendermétodo e o "outro" thread que faz a atualização. Como posso evitar que uma condição de corrida trave o aplicativo? (só não precisa travar, não há considerações de "correção" dos dados)


Uma possível solução que eu hipotetizei é usar atômicos. Não tenho certeza de como isso poderia ser feito, especialmente em Swift (não acha que Swift tem atômicos?)


EDITAR:

Tentarei adicionar mais contexto aqui, mas pode ser difícil adicionar um MRE, considerando que parte do que estou implementando está guardado em um repositório privado ao qual não tenho acesso.

Resumindo, estou tentando implementar uma camada personalizada do MapBox seguindo este exemplo . Os detalhes desta renderfunção específica no exemplo são irrelevantes, pois meu método de renderização precisa fazer algo completamente diferente, mas seria algo assim em pseudocódigo:

class MyCustomLayer: NSObject, CustomLayerHost {
    var locationData: [CLLocation] = []
    
    func render(...) {
        // calculate the viewport from the parameters
        let viewport = ...
        if viewport.fitSomeCondition {
            // fetch new location data. This can't block and needs to happen async
            fetchLocationDataFromServer(viewport: viewport)
            // need to somehow update the locationData
        }
        
        // render locationData
    }
}

Aqui locationDataestá uma matriz de longitudes e latitudes e renderestá separada do CustomLayerHostprotocolo do MapBox iOS SDK . O código-fonte de como CustomLayerHosté tratado não está disponível ao público, mas aqui está a declaração do cabeçalho:

/**
 * Render the layer. This method is called once per frame.
 *
 * This method is called if underlying map rendering backend uses Metal graphic API.
 *
 * @param The `parameters` that define the current camera position.
 * @param The MTLCommandBuffer used to render all map layers.
 * Use to create new command encoders. Do not submit as there could be map
 * layers following this custom layer in style's layer list and those won't get
 * to be encoded.
 * @param The MTLRenderPassDescriptor that defines rendering map to view drawable.
 *
 */
- (void)render:(nonnull MBMCustomLayerRenderParameters *)parameters
mtlCommandBuffer:(nonnull id<MTLCommandBuffer>)mtlCommandBuffer
mtlRenderPassDescriptor:(nonnull MTLRenderPassDescriptor *)mtlRenderPassDescriptor;

Entendo que este não é um MRE, mas espero que ajude a tornar a questão mais clara.

swift
  • 1 respostas
  • 40 Views
Martin Hope
bli00
Asked: 2024-05-26 08:40:08 +0800 CST

Estenda a visualização para o plano de fundo de outra visualização no SwiftUI

  • 6

Eu tenho uma visualização onde a parte superior é a Mape a parte inferior é arredondada View, atualmente, quando esta tela é exibida, a Mapvisualização para onde as duas visualizações se encontram com uma lacuna muito óbvia. Existe uma maneira de mesclar as duas perfeitamente para que o mapa aparece como se estivesse em segundo plano?

VStack {
    Map(position: $position) {
        UserAnnotation()
    }
    .mapStyle(.standard(elevation: .realistic))
    .ignoresSafeArea()

    List {
        ForEach(locationManager.debugMessages, id: \.self) { msg in
            Text(msg)
        }
    }
    .cornerRadius(30)
}

insira a descrição da imagem aqui

  • 1 respostas
  • 29 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve